基础路由
路由定义文件
/*
app/Http/routes.php 被 App\Providers\RouteServiceProvider 加载
*/
Route::get('/', function () {
return 'Hello World';
});
定义多个路由动词
Route::match(['get', 'post'], '/', function () {
return 'Hello World';
});
定义所有动词
Route::any('foo', function () {
return 'Hello World';
});
路由参数
路由参数不能包含 '-'
必要参数
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
多参数
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
可选参数
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
return $name;
});
正则表达式约束
where方法接受路由参数的名称和定义参数应如何定义正则表达式
Route::get('user/{name}', function ($name) { // }) ->where('name', '[A-Za-z]+'); Route::get('user/{id}', function ($id) { // }) ->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // }) ->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
全局限制
/*
可以在App\Providers\RouteServiceProvider 的boot方法中定义全局正则表达式限制。
*/
public function boot(Router $router)
{
$router->pattern('id', '[0-9]+');
parent::boot($router);
}
路由命名
路由命名可以让我们在使用route函数生成指向该路由的URL或者生成跳转到该路由的重定向链接时更加方便
//使用as数组指定路由
Route::get('user/profile', ['as' => 'profile', function () {
//
}]);
//uses制定控制器
Route::get('user/profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
//也可使用name方法
Route::get('user/profile', 'UserController@showProfile')->name('profile');
路由组和命令路由
如果使用路由组,则可以在路由组属性数组中指定as关键字,允许为组内的所有路由设置公共路由名前缀
Route::group(['as' => 'admin::'], function () {
Route::get('dashboard', ['as' => 'dashboard', function () {
// Route named "admin::dashboard"
}]);
});
生产URL到命名路由
一旦给一个给定的路由指定了一个名字,可以通过路由功能生成URL或重定向时使用路由名称
$url = route('profile');
$redirect = redirect()->route('profile');
如果路由定义参数,则可以将参数作为第二个参数传递给路由方法。给定的参数将自动插入到URL中
Route::get('user/{id}/profile', ['as' => 'profile', function ($id) {
//
}]);
$url = route('profile', ['id' => 1]);
路由组
路由组允许在大量路由之间共享路由属性,例如中间件或命名空间,而无需在每个单独的路由上定义这些属性。 共享属性以数组格式指定为Route :: group方法的第一个参数
中间件
要将中间件分配给组内的所有路由,可以使用组属性数组中的中间件密钥。中间件将按照定义此数组的顺序执行
Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // Uses Auth Middleware }); Route::get('user/profile', function () { // Uses Auth Middleware });});
命名空间
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
});
});
子域路由
Route::group(['domain' => '{account}.myapp.com'], function () {
Route::get('user/{id}', function ($account, $id) {
//
});
});
路由前缀
.。。。未完待续