时间:2021-07-01 10:21:17 帮助过:18人阅读
Laravel5.2 引入了中间件组的概念,这是一个为路由规则使用多个中间件的快捷方式,只需要定义一个中间件组key即可。
注:即使你不想使用中间件组,也可以继续往下看,因为这是Laravel全局中间件堆栈的一次重大改变。
所以还记得上面提到的admin的那个例子吗?现在我们可以为其创建一个“admin”中间件组,下面我们就来细说如何创建并使用中间件组。
你可以在 app\Http\Kernel.php中定义中间件组,该类中有个新数组属性 $middlewareGroups,该数组的键是中间件组的名字,值是对应的中间件。
Laravel默认为我们提供了 web和 api中间件组:
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, ], 'api' => [ 'throttle:60,1', ],];
正如你所看到的, $middlewareGroups的键可以是中间件类名也可以是指定路由中间件的别名如 throttle或 auth,下面我们来创建 admin中间件组:
protected $middlewareGroups = [ 'web' => [...], 'api' => [...], 'admin' => [ 'web', 'auth', ]];
我们已经定义了 admin中间件组使用 web(另一个中间件组)和 auth(路由中间件别名),就是这么简单!
与Laravel 5.1的不同之处
你可能已经注意到了, web中的中间件就是 Laravel 5.1 及之前版本中被应用到每个路由的中间件,这是一个思想上的重大提升:没有被分配web中间件组的路由将不会有cookies、sessions或者CSRF功能。比如只分配 api中间件组的路由就是这样。
我们已经创建了中间件组,接下来该如何使用它呢?
如果你看过 Laravel 5.2 的 routes.php将会很清楚:
Route::get('/', function () { return view('welcome');});Route::group(['middleware' => ['web']], function () { //});
正如你所看到的,你可以像使用路由中间件一样使用中间件组:既可以设置为指定的中间件,也可以是中间件数组,所以我们可以这样使用中间件组 admin:
Route::group(['middleware' => 'admin'], function () { Route::get('dashboard', function () { return view('dashboard'); });});
就是这么简单!