Laravel Session Flash mit Array

Sicherlich hast du dich schon mal mit der Flash Methode von Laravel beschäftigt. Einzelne Werte stellen dabei kein Problem dar. Was ist nun aber, wenn man mehr als einen Wert an die Session übergeben will?Zum Beispiel soll ein ganzes Array per Flash an die Session übergeben werden, um dieses im nächsten Request anzeigen zu lassen.

In diesem kurzen Beitrag zeige ich dir, wie wir in Laravel mittels redirect() und with() mehr als nur ein Wertpaar an die nächste View übergeben. Es wird ein Array an per Flash an die Session übergeben und n der View wird ein Bootstrap-Modal aufrufen und dieses mit den Werten belegt.

Übersicht

  1. Routes anlegen
  2. Controller anlegen
  3. Methoden anlegen
  4. View anlegen

Routes anlagen

Zuerst legen wir uns zwei Routen in unserer app/http/routes.php an. Hier ist es wichtig, dass wir die richtige Middleware einbinden, da wir sonst keine Nachrichten flashen können.

Ergänze die routes.php um folgenden Eintrag:

Wie du siehst, weisen wir den Routen die Middleware web zu. Diese wird benötigt, um Daten zu übergeben. Zudem erstellen wir zwei Routen. Die erste zeigt unsere View. Darin enthalten ist ein Link, welcher die zweite Route aufruft. Beide Routen rufen jeweils eine Methode aus dem TestController auf. Zu diesem Controller kommen wir im nächsten Schritt.

Hinweis: Oftmals findet man im Internet falsche Tutorials, die statt middlewareGroups nur middleware schreiben. Diese Variante gibt es zwar auch, allerdings funktioniert die web-Middleware damit nicht.

Controller anlegen

In diesem Schritt musst du einen Controller anlegen. Die gelingt dir entweder mittels Artisan-Kommando oder indem du einfach eine neue Datei im entsprechenden Verzeichnis anlegst.

Controller mit Artisan anlegen

Öffne deine Eingabeaufforderung oder dein Terminal und navigiere in den Root-Ordner deines Projekts (dort liegen unter anderem deine .env und deine composer.json). Windows-User können im entsprechenden Ordner einfach Shift + Rechtsklick machen und direkt im Ordner die Eingabeaufforderung aufrufen.

Führe nun folgenden Befehl aus:

Mit diesem Befehl wird in app/http/Controllers unser TestController angelegt.

Controller manuell anlegen

Navigiere in den Ordner app/http/Controllers deines Projekts und lege dort die Datei TestController.php an.

Methoden anlegen

Öffne unseren gerade angelegten Controller und achte darauf, dass folgender Inhalt gegeben ist:

Du hast nun zwei Methoden in deinem TestController: test() und testClick().

Die erste Methode wird aufgerufen, wenn wir die erste Route aufrufen und gibt lediglich eine View aus. Nichts dramatisches also.

Die zweite Methode wird aufgerufen, wenn wir in der View in den Link klicken. Wir erstellen einfach ein Array und übergeben diesem ein paar Werte, auf welche wir dann nach dem Redirect zugreifen wollen. Das Ende der Methode bildet die return-Anweisung. Diese ruft die redirect()-Methode auf. Ihr wird die URL übergeben, zu der weitergeleitet werden soll. Zusätzlich verknüpfen wir diese Methode mit der with()-Methode. Dieser Methode übergeben wir zwei Werte:

  1. „modal“: in der View müssen wir auf einen Session-Wert referenzieren. Dies machen wir über diesen Wert.
  2. $array: Hier übergeben wir einfach nur das Array mit Werten an die Session.

Mehr ist auch nicht nötig. Kommen wir zum letzten Punkt.

View anlegen

Für unsere View nutzen wir der Einfachheit halber Bootstrap. Die View gliedert sich in 3 Hauptteile:

Sichtbarer Inhalt

Wenn die Seite einfach so geladen wird, wird folgender Inhalt angezeigt:

Wir erstellen einfach einen Bootstrap-Container und befüllen diesen mit ein bisschen Inhalt. Wichtig hier ist nur der Link. Dieser verweist auf die URL, welche unsere zweite Methode mit dem redirect aufruft. Wir verwenden hier Blade-Syntax und die Laravel-Funktion url() um die URL zu generieren.

Mehr ist hier nicht nötig.

Javascript mit Blade-Elementen

Wir packen den ganzen Script-Block in eine jQuery-Funktion. Als nächstes schreiben wir eine kurze if-Anweisung in Blade-Syntax. Damit prüfen wir bereits serverseitig, ob der von uns benötigte Session-Eintrag überhaupt vorhanden ist. Wenn nicht, wird der komplette Script-Block einfach weggelassen. Dies is notwendig, damit bei einem normalen Aufruf der Seite kein Modal erscheint.

Mittels jQuery greifen wir auf drei Elemente des Modals zu und schreiben die Werte der Session in die Elemente. Für uns sieht der im Browser aufrufbare Quellcode wie folgt aus:

Du siehst also, dass die Werte korrekt aus der Session ausgelesen wurden. Dies gelingt mit der Laravel-Methode session(). Als ersten Parameter übergeben wir den Namen des Session-Elements und den Schlüssel des Arrays. popup.title greift also auf das title-Element unseres popup-Arrays in der aktuellen Session zu. Als zweiter Parameter kann ein Fallback-Wert hinterlegt werden. Ist der Eintrag in der Session nicht vorhanden, wird dieser Fallback-Wert gesetzt.

Modal

Zuletzt brauchen wir noch den HTML-Code für das Modal, welches aufgerufen wird, sollte der benötigte Session-Wert gesetzt sein:

Wichtig hier sind die IDs der entsprechenden Elemente. Nur wenn diese gesetzt sind, können wir mit jQuery darauf zugreifen und die Werte hineinschreiben.

Gesamter View-Code

Seite vor dem Klick auf den Link:

Seite ohne session-bedingten Modalaufruf

Seite nach dem Klick auf den Link:

Durch Session aufgerufenes Modal

Fazit

Wie du siehst, ist es kein Hexenwerk, mehr als einen Wert per Flash an eine View zu übergeben. Dahingehende ist die Dokumentation von Laravel leider nicht ganz eindeutig (meiner Meinung nach).

Ich hoffe, dass ich die weiterhelfen konnte und freue mich über Feedback jeglicher Art.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.