Laravel 5.*多个中间件整体控制器

Web*_*san 7 php laravel-5

如何为特定控制器中的所有路由定义多个中间件?是的,我可以在__constructor中定义一个midd,如:

$this->middleware( 'somemidd' );
Run Code Online (Sandbox Code Playgroud)

是的,我可以为路线定义多个midd:

Route::get('/', ['middleware' => ['MyMiddleware', 'MySecondMiddleware'], function () {
    //
}]); 
Run Code Online (Sandbox Code Playgroud)

为Route :: resourse定义多个midds不是解决方案,因为我在我的控制器中有自定义方法.而且我不想把midd放在全局范围内Kernel\protected $ middleware = ...

我怎么解决这个问题?

Grz*_*jda 12

您可以使用中间件组:

/**
 * 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',
    ],
];
Run Code Online (Sandbox Code Playgroud)

您还可以在__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',
        ]]);
    }
}
Run Code Online (Sandbox Code Playgroud)

更多:HTTP控制器,HTTP中间件.

  • 好的,简单的问题,如果我没有第二个中间件,而是有一个守卫,例如我有“auth”和“auth:admin”,我可以用同样的方式定义它们吗? (2认同)