laravel路由
路由分类:
基本路由:接收一个URL和一个闭包
Route::get('foo/bar',function(){ //闭包函数
return 'hello world';
})
注册路由的方法:get,post,put,delete,match,any
可以用函数url生成路由对应的URLs:$url=url('foo');
参数路由:路由参数是通过{参数}实现,参数在路由被执行时会被传递到路由的闭包。路由参数不能包含 ' - ' 字符,可以使用 ' _ ' 替代
1、必选参数
example:从URL中捕获用户ID
Route::get('user/{id}',function($id)){
return 'User'.$id;
}
注:可以定义多个路由参数,定义几个参数,在闭包函数中添加几个参数。
2、可选参数:在参数名的后边加上?号,另外在闭包函数的参数中给参数赋值。
example:
Route::get('user/{name?}',function($name=null){ //$name='LiuShuaiCai'
return $name;
})
3、正则约束:通过where方法来约束路由参数的格式,where('参数名','正则表达式')。
example:
Route::get('user/{id}/{name}',function($id,$name){
return $id.':'.$name;
})->where(['id']=>'[0-9]+',['name']=>'[a-z]+');
3.1、全局约束:路由参数在全局范围内被给定的正则表达式约束,使用pattern方法,在RouteServiceProvider类的boot方法中定义约束模式。
/**
* 定义路由模型绑定,模式过滤器等
*
* @param \Illuminate\Routing\Router $router
* @return void * @translator http://laravelacademy.org
*/
public function boot(Router $router){
$router->pattern('id', '[0-9]+');
parent::boot($router);
}
命名路由:命名路由使生成URLs或者重定向到指定路由变得很方便,在定义路由时指定路由名称,然后使用数组键as
指定路由别名。
Route::get('user/profile',['as'=>'profile',function(){
//
}]);
为控制器动作指定路由名称:
Route::get('user/profile',[
'as'=>'profiel','uses'=>'UserController@showProfile'
]);
为命名路由生成URLs:通过route函数生成URLs时可以使用as定义的路由名字:
$url = route('profile');
$redirect = redirect()->route('profile');
如果路由定义了参数,可以将参数作为函数route的第二个参数。
Route::get('user/{id}/profile',['as'->'profile',function($id){
//
}])
$url = route('profile',['id'=>1]);
路由群组:
1、中间件
2、命名空间
3、子域名路由
4、路由前缀