问题是 Lumen 还没有在 global 中间件中注册路由信息。
所以,如果你调用$request->route(),你只会得到空字符串:
class MyMiddleware {
public function handle($request, Closure $next)
{
$request->route(); // empty string or null
return $next($request);
}
}
决定将您的中间件定义为路由中间件,并手动将其设置为每个需要的路由。
bootstrap/app.php:
$app->middleware([
// MyMiddleware::class, // do not use global middleware
]);
$app->routeMiddleware([
MyMiddleware::class,
]);
// And then apply the middleware to every route using a group:
$app->router->group([
'namespace' => 'App\Http\Controllers',
'middleware' => [MyMiddleware::class],
], function ($router) {
require __DIR__ . '/../routes/web.php';
});
最终正确的中间件:
class MyMiddleware
{
public function handle($request, Closure $next)
{
// @see https://github.com/laravel/lumen-framework/issues/119#issuecomment-298835011
$route = $request->route();
$routeParameters = is_array($route) ? $route[2] : $route->parameters();
return $next($request);
}
}