laravel学习笔记(八)路由详解
1、路由文件存放路径:
在laravel5.4中是存放在routes文件夹下
2、类型:
常用的类型为get和post两种,其中post路由无法通过url直接访问:
Route::get('geturl', function(){
return 'this is get url';
});
Route::post('posturl', function(){
return 'this is post url';
});
如果想要通过多种类型访问url,可以通过match设置路由:
Route::match(['get', 'post'], 'getorposturl', function(){
return 'this is get or post url';
});
如果要允许任意类型都可以访问url,可以通过any设置路由:
Route::any('anyurl', function(){
return 'this is any url';
});
3、参数
在路由中可以通过{}括起来表示将url中的某一项值作为参数传递给控制器或闭包函数:
Route::get('user/{id}', function($id){
return 'User-id-'.$id;
});
如果参数想要设置默认值,在{}包含的内容后面增加?:
Route::get('user/{id?}', function($id = '0'){
return 'User-id-'.$id;
});
如果想要对参数部分通过正则表达式约束,可以通过where方法,如下限制id必须为数字:
Route::get('user/{id?}', function($id = '0'){
return 'User-id-'.$id;
})->where('id', '[0-9]+');
如要对多个参数进行正则表达式约束,where中通过数组进行传参:
Route::get('user/{id}/{name}', function($id, $name){
return 'User-id-' . $id . ' User-name-' . $name;
})->where(['id' => '[0-9]+', 'name' => '[A-Za-z]+']);
4、中间件
laravel中路由的调用位置在服务提供者app\Providers\RouteServiceProvider.php中做了配置,如api路由:
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
其中prefix表示以api为前缀,middleware表示调用api中间件,namespace指定控制器命名空间,group指定对应的路由文件。
中间件的定义在app\Http\Kernel.php中设置,其中$middleware表示全局中间件,$middlewareGroups表示中间件组,$routeMiddleware表示路由中间件。api中间件组的throttle:60,1表示1分钟允许调用60次:
'api' => [
'throttle:60,1',
'bindings',
],
浙公网安备 33010602011771号