2016-08-07 3 views
1

Предположим, пользователь вошли и посетить эту страницу пользователя http://domain.com/adminLaravel - Почему промежуточное ПО пропускается?

В контроллере, у меня есть __construct метод, как это:

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

Почему это шоу «Hello World» на экране? $this->middleware следует exectuted первой и перенаправить на страницу входа через Идент промежуточного слоя, так как пользователь не вошел в

Однако, если я удалю dd("Hello World"); как это:.

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

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

ответ

2

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

Ref:Laravel docs

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

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

+0

Где я могу увидеть, что '$ this-> middleware' связывается с методами контроллера? –

+0

Он находится в классе 'vendor \ laravel \ framework \ src \ Illuminate \ Container \ Container'. Имя метода - 'callClass' –

Смежные вопросы