1

假设用户已经登出并且用户访问了这个页面http://domain.com/admin

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

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

为什么它在屏幕上显示“Hello World”?$this->middleware应该首先执行并通过身份验证中间件重定向到登录页面,因为用户尚未登录。

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

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

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

4

1 回答 1

2

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

参考: Laravel 文档

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

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

于 2016-08-07T18:38:13.090 回答