我正在使用"laravel/lumen-framework": "5.7.*"
我有两个中间件,第一个中间件AuthTokenAuthenticate
应该应用于所有路由,因此它在bootstrap/app.php
中的定义就像
$app->middleware([
App\Http\Middleware\AuthTokenAuthenticate::class
]);
定义了另一个中间件
$app->routeMiddleware([
'auth.token' => Vendor\Utilities\Middleware\AuthToken::class
]);
,并且只会应用于某些特定的路线。
我需要先执行auth.token
,然后执行AuthTokenAuthenticate
,但我找不到解决方法,因为流明首先执行了$app->middleware
路由。
Laravel具有$middlewarePriority
,这正是我所需要的,但是我如何在流明中处理它呢?
答案 0 :(得分:4)
我认为您不希望在Lumen中做到这一点。我建议在router group middleware options旁边使用中间件。
删除全局中间件注册
/bootstrap/app.php
pageControl.isEnabled = false
将两个中间件都添加到路由中间件
/bootstrap/app.php
$app->middleware([
//App\Http\Middleware\AuthTokenAuthenticate::class
]);
创建两个路由组:一个仅包含$app->routeMiddleware([
'auth.token' => Vendor\Utilities\Middleware\AuthToken::class,
'auth.token.authenticate' => App\Http\Middleware\AuthTokenAuthenticate::class
]);
的路由组,一个同时包含auth.token.authenticate
和 auth.token
的路由组。
/ routes / web / php
auth.token.authenticate
我认为这是获得理想效果的最干净的方法。
答案 1 :(得分:0)
截止到Lumen v6(可能更早),您可以在定义路线时将中间件指定为数组字段。在路由文件web.php
中,我有以下内容:
$router->get('/api/path/to/thing', [
'uses' => 'FooController@index',
'middleware' => ['etag', 'caching', 'bar']
]);
请注意middleware
字段是如何包含三个元素的数组。调用此路由时,中间件etag
将首先执行,然后依次执行caching
和bar
。如果只有一个中间件类,则可以将其指定为纯字符串或仅包含一个元素的数组。当然,这可以扩展到route groups,以便您拥有一整类路由,所有路由都按此顺序使用此中间件。