【发布时间】:2022-01-25 15:45:30
【问题描述】:
我有一个接受参数的 Laravel 中间件。这个中间件在组级别被分配给一组路由。我需要专门为此组内的单个路由覆盖参数。我该怎么做?
如果我将->middleware('my_middleware:new_param') 添加到特定路由,则中间件会执行两次:第一次使用组级别的默认参数,第二次使用新参数。
如果我添加->withoutMiddleware('my_middleware')->middleware('my_middleware:new_param'),那么中间件根本不会执行。
示例
\App\Http\内核:
class Kernel extends HttpKernel {
protected $middleware = [
...
];
protected $middlewareGroups = [
'my_middleware_group' => [
'my_middlware:default_param',
...,
],
];
protected $routeMiddleware = [
'my_middlware' => \App\Http\Middleware\MyMiddleware::class,
...
];
}
\App\Providers\RouteServiceProvider:
class RouteServiceProvider extends ServiceProvider {
public function boot() {
$this->routes(function () {
Route::middleware('my_middleware_group')
->group(base_path('routes/my_routing_group.php'));
});
}
}
routes/my_routing_group.php:
// Neither the following line
Route::get('/my-url', [MyController::class, 'getSomething'])->middleware(['my_middlware:new_param']);
// nor this line works as expected
Route::get('/my-url', [MyController::class, 'getSomething'])->withoutMiddleware('my_middleware')->middleware(['my_middlware:new_param']);
【问题讨论】:
-
请问为什么组if for?我猜这里有一些不同的方法吗?如果可以,请添加有关中间件组的更多详细信息
标签: php laravel url-routing laravel-8 laravel-middleware