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', ],