Laravel ——路由(中间件与路由组)

来源:互联网 发布:淘宝子账户如何认证 编辑:程序博客网 时间:2024/05/26 07:29

我们知道,路由是一个过程,分析来自客户端的请求按照路由规则分发至相应的处理逻辑。但有种情况,打个比方:后台。后台不是所有人都能访问的,我们在正式的处理逻辑前,需要做一个验证,比如验证是否具有权限或者请求的数据是否合法。

这时候,路由过程的一部分——中间件就上场了。

app/Http/Kernel.php中的 $middleware 数组是全局中间件,也就是说,任何一条路由都会被应用这些中间件,比如里面的CSRF验证中间件。
有时候我们不需要全局中间件,这时候可以将某一个中间件注册至app/Http/Kernel.php文件中的$routeMiddleware数组,数组的键名是中间件的别名,键值是具体的中间件类,如
'auth' => 'App\Http\Middleware\AuthMiddleware'。
具体如何在某一路由上使用特定的中间件我们下文继续。

我们在app/Http/Kernel.php文件中的$routeMiddleware数组注册了一个独立中间件,这一中间件可被单独用绑定在一个路由和路由组上。在路由定义的时候可以像这样:

Route::get('admin/profile', ['middleware' => 'auth', function(){    //}]);
当我们访问http://yourdomain/admin/profile的时候,首先会经过全局中间件,然后就是我们在app/Http/Kernel.php的$routeMiddleware数组中定义的名称为auth的中间件。

路由组群

路由组群往往适用于给某一类路由分组,给这个路由组分配的中间件、过滤器等,都会被运用到该组内的所有路由。

说白了,路由组就是简化一部分路由定义过程的。比如,后台的我都想通过地址http://yourdomain/admin/***访问,假如我有用户(user)文章(article)两个模块,他们的访问都要经过一个验证权限的中间件,我需要这样定义路由:

Route::get('admin/user', ['middleware' => 'authority', function() {    // blablabla...}]);Route::get('admin/article', ['middleware' => 'authority', function() {    // blablabla...}]);

现在只有两条路由,我多写几个admin,middleware没啥的,但系统庞大以后,每个都要单独写对应的中间件,容易出错,不易管理。这时候,就应该使用路由组:

Route::group(['prefix' => 'admin', 'middleware' => 'authority'], function() {    Route::get('user', function() {        // blablabla...    });    Route::get('article', function() {        // blablabla...    });});

0 0