【问题标题】:Laravel - Why middleware get skipped?Laravel - 为什么中间件被跳过?
【发布时间】:2016-12-13 12:01:15
【问题描述】:

假设用户已登出并访问此页面http://domain.com/admin

在控制器中,我有这样的__construct 方法:

public function __construct() {
  $this->middleware('auth');
  dd("Hello World");
}

为什么屏幕上显示“Hello World”?应该先执行$this->middleware,然后通过auth中间件重定向到登录页面,因为用户还没有登录。

但是,如果我像这样删除dd("Hello World");

public function __construct() {
  $this->middleware('auth');
}

它工作正常并重定向到登录页面。

【问题讨论】:

    标签: php laravel laravel-5.2 laravel-authorization


    【解决方案1】:

    因为$this->middleware 方法实际上将您的控制器方法/操作绑定到您正在定义的auth 中间件。它不会在此时执行,而是在您的路由被调用时执行。

    参考:Laravel docs

    在控制器中指定中间件更方便 构造函数。使用控制器中的中间件方法 构造函数,您可以轻松地将中间件分配给 控制器的 动作

    在到达这条路线时:http://domain.com/admin。实际上,您的控制器的 index 方法会在控制器对象被实例化并绑定中间件后触发。

    【讨论】:

    • 在哪里可以看到 $this->middleware 绑定到控制器方法?
    • 它在vendor\laravel\framework\src\Illuminate\Container\Container 类中。方法名是callClass
    猜你喜欢
    • 2021-11-07
    • 1970-01-01
    • 2019-10-05
    • 2013-02-08
    • 2019-05-14
    • 2021-03-19
    • 2015-05-06
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多