Laravel 5.6多个中间件,其中一个中间件除外

时间:2018-12-05 08:39:01

标签: php laravel

我有2个用于控制器的中间件clearancestatus

我在所有控制器方法上都需要所有clearance中间件,而对于status中间件,我需要采用以下方法:索引,创建,存储和销毁。

我在控制器中执行此操作,但这适用于机器人中间件除外。

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

有没有办法实现我的目标?

2 个答案:

答案 0 :(得分:1)

是的,您可以为每个中间件调用一次中间件功能。

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

答案 1 :(得分:0)

您可以使用中间件组:

/**
 * 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',
   ],

];

您还可以在__construct()方法中使用许多中间件:

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',
    ]]);
  }
}

更多:HTTP ControllersHTTP Middleware