Laravel нет доступа к сессии в конструкторе контроллера?

В Laravel доступ к сессии не доступен в конструкторе контроллера. Это происходит из-за того, что Laravel устанавливает состояние сессии позже в одном из middleware, которые выполняются после конструктора контроллера.

Когда запрос поступает на ваше приложение Laravel, сначала происходит выполнение middleware. Middleware - это промежуточное звено между входящими запросами и ответами, которое может выполнять определенные задачи перед тем, как запрос попадет в контроллер.

Один из этих middleware, называется "StartSession", отвечает за установку состояния сессии. То есть, Laravel не устанавливает состояние сессии до и после выполнения middleware.

Когда конструктор контроллера вызывается, middleware еще не выполнился, поэтому доступ к сессии не будет доступен в конструкторе. Если попытаться обратиться к сессии в конструкторе контроллера, Laravel вернет null или пустой объект.

Однако, Laravel предлагает другие методы, чтобы работать с сессиями внутри контроллера. Например, вы можете использовать методы request()->session() или app('session') для доступа к объекту сессии.

Пример:

namespace AppHttpControllers;
use IlluminateHttpRequest;

class SomeController extends Controller
{
    public function __construct(Request $request)
    {
        $this->middleware('session');
        
        $session = $request->session();
        // или $session = app('session');
        
        // использование сессии
        $value = $session->get('key');
    }
}

Как вы можете видеть, мы получаем доступ к сессии через request()->session() или app('session') внутри конструктора контроллера. С этого момента вы можете работать с сессией и использовать все методы доступные для управления сессией.

Это был более развернутый ответ на ваш вопрос о доступе к сессии в конструкторе контроллера в Laravel.