Wednesday, May 27, 2015

Contoh penggunaan facade route::

1. GET Route - terima URI:

Route::get('/', function()
{
    return 'Hello World';
});

2. Routes POST, PUT, DELTE :

Route::post('foo/bar', function()
{
    return 'Hello World';
});

Route::put('foo/bar', function()
{
    //
});

Route::delete('foo/bar', function()
{
    //
});

3. Route untuk verb berlainan :

Route::match(['get', 'post'], '/', function()
{
    return 'Hello World';
});

4. Route semua HTTP Verb :

Route::any('foo', function()
{
    return 'Hello World';
});



nota : 

- url helper:

$url = url('foo');

- masukkan token :
 
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
 
atau untuk blade :
 
<input type="hidden" name="_token" value="{{ csrf_token() }}">

 5. addtional method

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
</form>

6. Route Parameter
 
Route::get('user/{id}', function($id)
{
    return 'User '.$id;
});


- dengan pilihan

Route::get('user/{name?}', function($name = null)  
{ 
   return $name; 
});
- dengan pilihan dan default

Route::get('user/{name?}', function($name = 'John')  
{ 
   return $name; 
});

7. Menggunakan Regular Expression :

Route::get('user/{name}', function($name)
{
    //
})
->where('name', '[A-Za-z]+');

Route::get('user/{id}', function($id)
{
    //
})
->where('id', '[0-9]+');

 

8. Kekangan array :

Route::get('user/{id}/{name}', function($id, $name)
{
    //
})
->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

 

8. Definisi Global Patterns

set dalam RouteServiceProvider:
 
$router->pattern('id', '[0-9]+');
 
 
Route::get('user/{id}', function($id)
{
    // Only called if {id} is numeric.
});

 

9. semak parameter Route :

 
if ($route->input('id') == 1)
{
    //
}


atau

use Illuminate\Http\Request;

Route::get('user/{id}', function(Request $request, $id)  
{ 
   if ($request->route('id'))  
   { 
      // 
   } 
});


11. Namakan routes

Route::get('user/profile', ['as' => 'profile', function()
{
    //
}]);
 
 
You may also specify route names for controller actions:
 
Route::get('user/profile', [
    'as' => 'profile', 'uses' => 'UserController@showProfile'
]);

Now, you may use the route's name when generating URLs or redirects:
 
$url = route('profile');

$redirect = redirect()->route('profile');


The currentRouteName method returns the name of the route handling the current request:
$name = Route::currentRouteName();

Route Groups

Sometimes many of your routes will share common requirements such as URL segments, middleware, namespaces, etc. Instead of specifying each of these options on every route individually, you may use a route group to apply attributes to many routes.
Shared attributes are specified in an array format as the first parameter to the Route::group method.

Middleware

Middleware are applied to all routes within the group by defining the list of middleware with the middleware parameter on the group attribute array. Middleware will be executed in the order you define this array:
Route::group(['middleware' => ['foo', 'bar']], function()
{
    Route::get('/', function()
    {
        // Has Foo And Bar Middleware
    });

    Route::get('user/profile', function()
    {
        // Has Foo And Bar Middleware
    });

});

Namespaces

You may use the namespace parameter in your group attribute array to specify the namespace for all controllers within the group:
Route::group(['namespace' => 'Admin'], function()
{
    // Controllers Within The "App\Http\Controllers\Admin" Namespace

    Route::group(['namespace' => 'User'], function()
    {
        // Controllers Within The "App\Http\Controllers\Admin\User" Namespace
    });
});
Note: By default, the RouteServiceProvider includes your routes.php file within a namespace group, allowing you to register controller routes without specifying the full App\Http\Controllers namespace prefix.

Sub-Domain Routing

Laravel routes also handle wildcard sub-domains, and will pass your wildcard parameters from the domain:

Registering Sub-Domain Routes

Route::group(['domain' => '{account}.myapp.com'], function()
{

    Route::get('user/{id}', function($account, $id)
    {
        //
    });

});

Route Prefixing

A group of routes may be prefixed by using the prefix option in the attributes array of a group:
Route::group(['prefix' => 'admin'], function()
{
    Route::get('users', function()
    {
        // Matches The "/admin/users" URL
    });
});
You can also utilize the prefix parameter to pass common parameters to your routes:

Registering a URL parameter in a route prefix

Route::group(['prefix' => 'accounts/{account_id}'], function()
{
    Route::get('detail', function($account_id)
    {
        //
    });
});
You can even define parameter constraints for the named parameters in your prefix:
Route::group([
    'prefix' => 'accounts/{account_id}',
    'where' => ['account_id' => '[0-9]+'],
], function() {

    // Define Routes Here
});

Route Model Binding

Laravel model binding provides a convenient way to inject class instances into your routes. For example, instead of injecting a user's ID, you can inject the entire User class instance that matches the given ID.
First, use the router's model method to specify the class for a given parameter. You should define your model bindings in the RouteServiceProvider::boot method:

Binding A Parameter To A Model

public function boot(Router $router)
{
    parent::boot($router);

    $router->model('user', 'App\User');
}
Next, define a route that contains a {user} parameter:
Route::get('profile/{user}', function(App\User $user)
{
    //
});
Since we have bound the {user} parameter to the App\User model, a User instance will be injected into the route. So, for example, a request to profile/1 will inject the User instance which has an ID of 1.
Note: If a matching model instance is not found in the database, a 404 error will be thrown.
If you wish to specify your own "not found" behavior, pass a Closure as the third argument to the model method:
Route::model('user', 'User', function()
{
    throw new NotFoundHttpException;
});
If you wish to use your own resolution logic, you should use the Route::bind method. The Closure you pass to the bind method will receive the value of the URI segment, and should return an instance of the class you want to be injected into the route:
Route::bind('user', function($value)
{
    return User::where('name', $value)->first();
});

Throwing 404 Errors

There are two ways to manually trigger a 404 error from a route. First, you may use the abort helper:

abort(404);



 
 




 

No comments:

Post a Comment