Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.02.2018 02:31:04

Auth::user() = null в конструкторе контроллера

Версия Laravel: 5.5.25
Версия PHP: 7.2.0
Операционная система и её версия: ubuntu16.04.1
Вендор и версия сервера БД:
Вендор и версия Веб-сервера: nginx/1.13.3

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

Route::group(['prefix' => 'admin', 'middleware' => 'auth'], function (){
    Route::get('/', ['uses' => 'Admin\IndexController@index', 'as' => 'adminIndex']);
    Route::resource('articles', 'Admin\ArticlesController', ['as' => 'admin']);

});

Код AdminController

class AdminController extends Controller
{
    protected $user;
    
    public function __construct()
    {
        $this->user = Auth::user() // null
    }

    public function renderOutput()
    {
       $this->user = Auth::user() // возвращается модель User
    }
   
}

Код IndexController

class IndexController extends AdminController
{
    public function __construct()
    {
        parent::__construct();        
    }

    public function index()
    {
        return $this->renderOutput();
    }
}

Ну вот, собственно, из комментариев в коде AdminController должно быть ясна суть вопроса. Изначально задумывалось после аутентификации сохранять юзера в переменную в конструкторе. Но не тут то было. В этот момент его еще нет. Хотя посредник Auth уже пройден. А вот во время вызова функции renderOutput() он чудесным образом появляется. Не пойму в чём причина такого странного поведения. Это же никак не логично сохранять юзера в функции, которая для этого не предназначена. Как раз для таких дел нужен конструктор. Этот код взят из обучающего материала, где он выполнялся на версии Laravel 5.2. И там он корректно работал. В версии 5.5 это уже не работает. Сможет ли кто объяснить почему так?

Не в сети

#2 03.02.2018 10:45:47

Re: Auth::user() = null в конструкторе контроллера

Сессия в конструкторе контроллера не работает и сохранять пользователя в переменную бесмысленно, т.к. есть глобальный помощник auth():

auth()->user() везде вернет аутентифицированного пользователя или null.
auth()->id() вернет его ID или null

Не в сети

Подвал раздела