laravel系列笔记二:路由的使用

写在前面的话

Laravel的路由功能非常强大,比起一般的框架比如ThinkPHP自动解析URL到控制器方法,这种方式更容易控制。

一般我们对路由的基本要求包括:

  • 路由参数控制
  • 快捷准确的生成URL
  • 中间件处理(或钩子)

基本路由和参数控制

路由定义在app/Http/routes.php文件中

基本路由

比如:

1
2
3
 Route::get('user/profile',function(){ 
return 'hello world';
});

其中get能换成postdeleteput、等http动作。

多重动作注册路由
1
2
3
Route::match(['get', 'post'], '/', function () {
return 'Hello World';
});
1
2
3
 Route::any('foo', function () {
return 'Hello World';
});
生成路由
1
2
3
url('profile', ['id' => 1,'admin'=>'chenkai'])
action('IndexController@profile', ['id' => 1,'admin'=>'chenkai'])
route('profile', ['id' => 1], true)

此处应注意三者的区别,route是根据路由注册时别名生成的,action是根据控制器动作生成的,url是单纯的在url根目录后增加内容,此处具体区别可参考Laravel 深入理解路由和URL生成

不过常用的还是将路由绑定到控制器方法。形如这样:

1
route::get('user','IndexController@profile');

路由参数相关

形如(其中id可选,如需必填去掉问号)

1
route::get('user/{id?}','IndexController@profile');

注意这种形式get('user/{id?}的参数和普通url参数的区别

路由参数限制用where方法(支持正则)

1
route::get('user/{id?}','IndexController@profile')->where(['id' => '[0-9]+']);

全局限制可在RouteServiceProvider 的 boot 方法里使用pattern方法

1
2
3
4
5
6
public function boot(Router $router)
{
$router->pattern('id', '[0-9]+');

parent::boot($router);
}

路由命名有两种实现方法
1.用as数组实现

1
route::get('user/{id?}',['as' => 'userInfo', 'uses' =>'IndexController@profile']);



2.用name方法实现

1
route::get('user/{id?}','IndexController@profile')->name('userInfo');

命名之后可用route('userInfo')方法生成路由url

路由群组相关

之所以使用路由群组是为了把使用相同中间件,命名空间,参数限制的路由归类,共用属性以数组形式存在。

其中中间件是middleware,命名空间是namespace,子域名路由是domain,路由前缀是prefix

1
2
3
4
Route::group(['middleware' => 'auth'], function () {
Route::get('/user','UserController@profile');
Route::get('/article','ArticleController@detail');
}

CSRF保护

CSRF就是laravel为了防止伪造请求的一种处理逻辑.

一般使用 Blade 模板引擎 时laravel会自动才表单中加入,或者手动加入csrf_field()

如果你希望在某些路由中不适用CSRF验证,可以在VerifyCsrfToken 中间件中增加 $except 属性。

此文章更新于2016年5月20日21:44 😂

在此打赏