Laravel — Почему промежуточное ПО пропускается?

Предположим, что пользователь вышел из системы и посещает эту страницу 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');
}

Он работает нормально и перенаправляет на страницу входа.


person I'll-Be-Back    schedule 07.08.2016    source источник


Ответы (1)


Потому что метод $this->middleware фактически связывает методы/действия вашего контроллера с промежуточным программным обеспечением auth, которое вы определяете. он не выполняется в этот момент вместо этого, когда вызывается ваш маршрут.

Ссылка: документы Laravel

удобнее указать промежуточное ПО в конструкторе вашего контроллера. Используя метод промежуточного ПО из конструктора вашего контроллера, вы можете легко назначить промежуточное ПО действию контроллера action.

и во время поездки по этому маршруту: http://domain.com/admin. На самом деле метод index вашего контроллера срабатывает после создания экземпляра объекта контроллера и привязки промежуточного программного обеспечения.

person Zayn Ali    schedule 07.08.2016
comment
Где я могу увидеть, что $this->middleware связывается с методами контроллера? - person I'll-Be-Back; 07.08.2016
comment
Это класс vendor\laravel\framework\src\Illuminate\Container\Container. Имя метода callClass - person Zayn Ali; 07.08.2016