【问题标题】:How to overwrite parameters of a Laravel middleware which already is assigned as a group middleware?如何覆盖已分配为组中间件的 Laravel 中间件的参数?
【发布时间】: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


【解决方案1】:

答案很简单:还必须重复->withoutMiddleware 中不想使用的确切参数。这意味着

routes/my_routing_group.php:

Route::get('/my-url', [MyController::class, 'getSomething'])
  ->withoutMiddleware(['my_middlware:default_param'])   // the original parameters must be repeated, too
  ->middleware(['my_middlware:new_param']);

成功了。

【讨论】:

    猜你喜欢
    • 2019-10-16
    • 2016-10-09
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2021-11-14
    • 2018-10-08
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多