\ Request :: getSession () возвращает NULL в конструкции контроллера - PullRequest
3 голосов
/ 26 апреля 2019

Я хочу получать идентификатор сеанса пользователя при каждой загрузке страницы, поэтому я использую \ Request :: getSession () -> getId () в конструкции контроллера, но я получаю эту ошибку

Call to a member function getId() on null

Если я использую один и тот же код в любом из методов маршрута, он работает.

Как я могу решить эту проблему?

Ответы [ 4 ]

0 голосов
/ 27 апреля 2019

Это сработало для меня:

public function __construct()
{
    // No session access from constructor work around
    $this->middleware(function ($request, $next) {
        \Request::getSession()->getId();
        return $next($request);
    });
}
0 голосов
/ 26 апреля 2019

Это стандартная функциональность Laravel. Данные сеанса больше не доступны в конструкторе. См:

laravel - Не удается получить сессию в конструкторе контроллера

0 голосов
/ 27 апреля 2019

Слово Тейлора об этом:

Очень плохо использовать сеанс или аутентификацию в вашем конструкторе, так как еще не было выполнено ни одного запроса, а сеанс и аутентификация по своей природе привязаны к HTTP-запросу. Вы должны получить этот запрос в реальном методе контроллера, который вы можете вызвать несколько раз с несколькими различными запросами. Вынуждая ваш контроллер разрешать информацию о сеансе или аутентификации в конструкторе, вы теперь заставляете весь свой контроллер игнорировать фактический входящий запрос, который может вызвать значительные проблемы при тестировании и т. Д.

0 голосов
/ 26 апреля 2019

Попробуйте use Illuminate\Support\Facades\Auth; Auth::getSession()->getId();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...