Laravel 8 使用 OR 条件的相同路由多个中间件

Laravel 8 same route multiple middleware using OR condition

您好,我尝试使用像下面代码这样的中间件来验证 OR 运算符

Route::get('/page', [Controller::class, 'index'])->middleware(['mid1','mid2']);

在此示例中,它使用了 AND 运算符而不是,或者我也使用了这样的组

Route::group(['middleware' => 'mid1'], function () {
   Route::get('/page', [Controller::class, 'index']);
});
Route::group(['middleware' => 'mid2'], function () {
   Route::get('/page', [Controller::class, 'index']);
});

但是使用具有相同路线的组,组中的第二条路线是唯一可读的。 请帮忙

laravel 中没有任何内置功能可以做这样的事情。

您可以创建另一个 middle-ware 来包含您需要申请的两个条件。

在你的中间件中:

public function handle($request, Closure $next) {
    if (condition1 || condition2) {
       return $request($next);
    }
    abort('statusCode');
}

我同意@Faesal。最好将两个中间件逻辑合并为一个中间件。

public function handle($request, Closure $next) {
    if (your condition) {
       //logic inside mid1 handler
    }else{
       //logic inside mid2 handler
    }
}

虽然不推荐,但是你可以把你的条件放在路由文件里。

if(your conditions){
  Route::group(['middleware' => 'mid1'], function () {
   Route::get('/page', [Controller::class, 'index']);
  });
}else{
 Route::group(['middleware' => 'mid2'], function () {
   Route::get('/page', [Controller::class, 'index']);
  });
}