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 dalamRouteServiceProvider
:
$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 themiddleware
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 thenamespace
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, theRouteServiceProvider
includes yourroutes.php
file within a namespace group, allowing you to register controller routes without specifying the fullApp\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 theprefix
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 theabort
helper:abort(404);
No comments:
Post a Comment