Laravel 控制器:控制器中使用中间件 1 个改进

问题

如何在控制器中使用中间件?

回答

在Laravel 中,可以在控制器的构造函数中指定中间件,这比在路由文件中分配中间件给控制器路由方便得多。

实践

在控制器的构造函数中,使用 middleware 方法即可将中间件分配给控制器的操作,而且还可进一步细分,将中间件限制仅用于控制器类上的某些方法。

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

        $this->middleware('log')->only('index');

        $this->middleware('subscribed')->except('store');
    }
}

将中间件应用于整个控制器:

$this->middleware('auth');

将中间件仅应用于控制器的 index 方法

$this->middleware('log')->only('index');

将中间件 subscribed 应用于控制器中除 store 之外的所有方法

$this->middleware('subscribed')->except('store');

此外,middleware 方法还支持以闭包形式来注册中间件。这样,我们就不必创建一个完整的中间件类了,这为单个控制器定义中间件提供了一种方便的方法:

$this->middleware(function ($request, $next) {
    // ...

    return $next($request);
});

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 1
elesos

优雅

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!