Php Laravel 5.6多个中间件,除1个中间件外

Php Laravel 5.6多个中间件,除1个中间件外,php,laravel,Php,Laravel,我有两个用于我的控制器、许可和状态的中间件 我需要所有控制器方法上的所有清除中间件,对于状态中间件,我需要清除以下方法:索引、创建、存储和销毁 我在我的控制器中执行此操作,但除了bot中间件之外,这将应用 $this->middleware(['clearance', 'status', ['except' => ['index', 'create', 'store', 'destroy']]]); $this->middleware('clearance'); $this-

我有两个用于我的控制器、许可和状态的中间件

我需要所有控制器方法上的所有清除中间件,对于状态中间件,我需要清除以下方法:索引、创建、存储和销毁

我在我的控制器中执行此操作,但除了bot中间件之外,这将应用

$this->middleware(['clearance', 'status', ['except' => ['index', 'create', 'store', 'destroy']]]);
$this->middleware('clearance');
$this->middleware('status')->except(['index', 'create', 'store', 'destroy']);

有什么方法可以实现我的目标吗?

是的,您可以为每个中间件调用一次中间件函数

$this->middleware(['clearance', 'status', ['except' => ['index', 'create', 'store', 'destroy']]]);
$this->middleware('clearance');
$this->middleware('status')->except(['index', 'create', 'store', 'destroy']);

您可以使用中间件组:

/**
 * The application's route middleware groups.
 *
 * @var array
*/
protected $middlewareGroups = [
   'web' => [
      \App\Http\Middleware\EncryptCookies::class,
      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
      \Illuminate\Session\Middleware\StartSession::class,
      \Illuminate\View\Middleware\ShareErrorsFromSession::class,
      \App\Http\Middleware\VerifyCsrfToken::class,
   ],

   'api' => [
      'throttle:60,1',
      'auth:api',
   ],
])

此外,您还可以在构造方法中使用许多中间件:

class UserController extends Controller{
  /**
   * Instantiate a new UserController instance.
   *
   * @return void
   */
  public function __construct(){
    $this->middleware('auth');

    $this->middleware('log', ['only' => [
        'fooAction',
        'barAction',
    ]]);

    $this->middleware('subscribed', ['except' => [
        'fooAction',
        'barAction',
    ]]);
  }
}

更多:,

这不会覆盖初始中间件?不,所有中间件将按照您添加它们的顺序进行检查。