2017-01-16 7 views
-2

согласно Laravel документации https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors я больше не могу получить доступ к сессии в конструкции, так как промежуточный разве загружено еще, они предоставили пример, который я не мог понятьОбъясните, как использовать сессию в конструкторе Laravel 5.3

public function __construct() 
{ 
    $this->middleware(function ($request, $next) { 
     $this->projects = Auth::user()->projects; 

     return $next($request); 
    }); 
} 

Как мне получить доступ к моей сессии здесь внутри этой функции? , разъяснение сделало бы

ответ

0

В документах Laravel указано, что в конструкторе больше нет доступа к промежуточному ПО, поскольку он еще не загружен.

Используя это конкретное закрытие, вы фактически заставляете php (и Laravel) загружать любую логику, имеющуюся в Closure, в качестве промежуточного программного обеспечения. Взгляните на basic controller class, предоставленный Laravel, и посмотрите, можете ли вы соединить точки.

По существу, вы взламываете фреймворк.

Это, как говорится, очень плохая практика, и вы не должны нравиться своей сессии в конструкторах контроллера.

+0

Ну, я пытаюсь инициализировать глобальную переменную с пользовательскими данными внутри конструктора, иначе я должен вспомнить ее из базы данных. –

+0

Создайте для этого промежуточное ПО и добавьте его к необходимым маршрутам. Конструкторы предназначены для инициализации свойств этого класса и не более того. – Loek

0

Поместите это в свою __construct() функцию вашего контроллера, которая будет обрабатывать запрос.

+0

я сделал это , но я не уверен, где назначить мои глобальные переменные. Я попытался получить доступ к нему изнутри, и он получил данные сеанса, поэтому я предполагаю, что назначение находится внутри функции закрытия. –

+0

Закрытие ограничено, вы должны использовать ($ var) 'для правильной области. – Ohgodwhy

0
public function __constrcut(){ 
    //changing language accordding to session 
    $this->middleware(function($request,$next){ 
     app::setLocale(Session::get('locale')); 
     return $next($request); 
    }); 

Этот код используется для изменения языка в соответствии с сессии версии, которую я использую Laravel 5.5 Примечание: вы должны вызвать middelware первую затем использовать сессию как конструктор не видит сессии это работает для меня