Laravel - 为什么跳过中间件?

时间:2016-08-07 17:45:32

标签: php laravel laravel-5.2 laravel-authorization

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

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

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

为什么屏幕上会显示“Hello World”? $this->middleware应首先被执行并通过auth中间件重定向到Login Page,因为用户尚未登录。

但是,如果我删除dd("Hello World");,请执行以下操作:

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

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

1 个答案:

答案 0 :(得分:2)

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

参考: Laravel docs

  

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

并且在点击此路线时:http://domain.com/admin。实际上,在控制器对象实例化并绑定中间件后,控制器的index方法将触发。