2017-01-16 1 views
-2

nach Laravel docs https://laravel.com/docs/5.3/upgrade#5.3-session-in-constructors i nicht mehr der Sitzung in dem Konstrukt zugreifen, da die Middleware isnt noch geladen wird, sie ein Beispiel vorgesehen, dass ich konnte nicht verstehenErklären Sie, wie Session verwenden, im Konstruktor Laravel 5.3

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

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

Wie greife ich auf meine Sitzung hier innerhalb dieser Funktion? , würde eine Erklärung tun

Antwort

0

Die Laravel-Dokumentation gibt an, dass Sie im Konstruktor nicht mehr auf Middleware zugreifen können, da sie noch nicht geladen wurde.

Durch die Verwendung dieser spezifischen Closure zwingen Sie php (und Laravel) tatsächlich, die Logik, die Sie in der Closure haben, als Middleware zu laden. Werfen Sie einen Blick auf die basic controller class von Laravel und sehen Sie, ob Sie die Punkte verbinden können.

Im Wesentlichen hacken Sie das Framework.

Das ist gesagt, es ist wirklich schlechte Übung und Sie sollten nicht mit Ihrer Sitzung in Controller-Konstrukteure temperieren.

+0

Nun, ich versuche eine globale Variable mit Benutzerdaten im Konstruktor zu initialisieren, sonst muss ich sie aus der Datenbank abrufen –

+0

Erstellen Sie eine Middleware dafür und fügen Sie sie dann den notwendigen Routen hinzu. Konstruktoren dienen zum Initialisieren von Eigenschaften dieser Klasse und nicht mehr. – Loek

0

Platzieren Sie dies in Ihrer __construct() Funktion Ihres Controllers, die die Anfrage behandeln wird.

+0

i tat, , aber ich bin mir nicht sicher, wo ich meine globalen Variablen zuweisen soll, Ich habe versucht, von innen darauf zuzugreifen, und es hat die Sitzungsdaten erhalten, also nehme ich an, dass Zuweisung innerhalb der Schließung func ist. –

+0

Closures sind beschränkt, Sie müssen ($ var) 'verwenden, damit es korrekt skaliert wird. – Ohgodwhy

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

Dieser Code verwendete Sprache zum Ändern Sitzung nach der Version, die ich Laravel 5.5 verwenden Hinweis: Sie können die Middel rufen müssen zuerst dann Sitzung als Konstruktor nicht Session sehen das funktioniert für mich

Verwandte Themen