Heim >Backend-Entwicklung >PHP-Tutorial >Ein tiefes Eintauchen in Sessions in Laravel
Beim Erstellen einer Laravel -Anwendung sind Sie fast sicher, dass Sie die Sitzung irgendwann abwickeln müssen. Sie sind der grundlegende Teil der Webentwicklung.
In diesem Artikel wird schnell erklärt, welche Sitzungen sind, wie sie in Laravel arbeiten und wie Sie sie in Laravel -Anwendungen verwenden.
Wir werden dann noch einen Schritt weiter gehen und in die Interaktion mit Sitzungen mit "Sitzungsklassen" eingehen, um die gemeinsamen Fallstricke zu vermeiden, denen ich häufig beim Umgang mit Laravel -Anwendungen begegnen kann.
Schließlich werden wir lernen, wie man Sitzungsdaten in Laravel testet.
standardmäßig sind Webanwendungen staatenlos, was bedeutet, dass Anfragen normalerweise nicht kennen. Daher benötigen wir eine Möglichkeit, Daten zwischen Anfragen zu speichern. Wenn sich Benutzer beispielsweise auf einer Website anmelden, müssen wir uns daran erinnern, dass sie während ihres Besuchs angemeldet sind. Hier kommt das Gespräch ins Spiel.
Kurz gesagt, eine Sitzung ist eine sichere Möglichkeit, Daten zwischen mehreren Anforderungen zu bestehen.Sitzungsdaten können verwendet werden, um den folgenden Inhalt zu speichern:
Folgende Beispieldaten, die Sie möglicherweise in einer Sitzung in einer Laravel -Anwendung finden:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>Lassen Sie uns das, was jeder Schlüssel darstellen könnte, aufschlüsseln.
Die folgenden Schlüssel werden vom Laravel -Framework selbst hinzugefügt:
Der Wert
_token
Der Wert _previous.url
_flash.old
in einer früheren Anfrage geblitzt wurde. success
_flash.new
success
Der Wert current_team_id
cookie
- Sitzungsdaten werden in sicheren und verschlüsselten Cookies gespeichert. database
- Sitzungen werden in Ihrer Datenbank gespeichert (z. B. MySQL, PostgreSQL, SQLite). memcached
/ redis
- Sitzungsdaten werden in diesem schnellen Cache -Speicher gespeichert. dynamodb
- Sitzungsdaten werden in AWS DynamoDB gespeichert. file
- Sitzungsdaten werden in storage/framework/sessions
gespeichert. array
- Sitzungsdaten werden in PHP -Arrays im Speicher gespeichert und nicht bestehen. Einige dieser Treiber haben Einrichtungsanforderungen. Überprüfen Sie vor der Verwendung unbedingt die Laravel -Dokumentation, um zu erfahren, wie Sie sie einrichten.
Laravel macht die Verwendung von Sitzungen sehr einfach. In der Dokumentation wird erläutert, wie man mit einer Sitzung gut interagiert. Aber werfen wir einen kurzen Blick auf die Grundlagen.
Für unser Beispiel werden wir davon ausgehen, dass wir einen Schritt-für-Schritt-Assistenten auf mehreren Seiten erstellen. Wir werden den aktuellen Schritt und die in jedem Schritt eingegebenen Daten in die Sitzung speichern. Auf diese Weise können wir, wenn der Benutzer alle Schritte ausführt, alle eingereichten Daten am Ende des Assistenten lesen.
Um das Beispiel einfach zu machen, werden wir auch die Funktion session()
Helfer verwenden. Später werden wir jedoch mithilfe der Fassade Session
oder der Anforderungsklasse zu Aufzugsaufnahmedaten diskutieren.
Um Daten aus einer Sitzung zu lesen, können Sie die Methode get
wie folgt verwenden:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>
Ausführen des oben genannten Codes gibt den in der Sitzung gespeicherten Wert als wizard:current_step
-Staste zurück. Wenn der Schlüssel in der Sitzung keinen gespeicherten Wert hat, gibt er null
zurück.
Mit dieser Methode können Sie auch einen Standardwert definieren, der zurückgibt:
Wenn der Schlüssel nicht vorhanden ist:<code>$currentStep = session()->get(key: 'wizard:current_step');</code>
Ausführen des oben genannten Codes gibt den in der Sitzung gespeicherten Wert als wizard:current_step
-Staste zurück. Wenn der Schlüssel in der Sitzung keinen gespeicherten Wert hat, gibt er 1
zurück.
Es kann auch Zeiten geben, in denen Sie Daten aus der Sitzung lesen und gleichzeitig löschen möchten (so dass nicht wieder zugegriffen werden kann). Sie können die pull
-Funktion dafür verwenden:
<code>$currentStep = session()->get(key: 'wizard:current_step', default: 1);</code>
Ausführen des oben genannten Codes gibt den in der Sitzung gespeicherten Wert als wizard:current_step
-Taste zurück und löscht ihn dann aus der Sitzung.
Um Daten in eine Sitzung zu schreiben, können Sie die unten gezeigte put
-Funktion verwenden:
<code>$currentStep = session()->pull(key: 'wizard:current_step');</code>
Ausführen des oben genannten Codes speichert das Array (übergeben im zweiten Parameter) als Wert der wizard:step_one:form_data
-Taste.
In ähnlicher Weise können Sie auch die Methode push
verwenden, um Daten in der Sitzung in ein Array zu drücken:
<code>session()->put( key: 'wizard:step_one:form_data', value: [ 'name' => 'Ash Allen', 'email' => 'ash@example.com', ], );</code>
Angenommen, der wizard:step_one:form_data:languages
-Staste hat die folgenden Daten:
<code>session()->push( key: 'wizard:step_one:form_data:languages', value: 'javascript', );</code>
Der obige Code (Aufruf der Methode push
) aktualisiert den Sitzungswert:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>
Wenn der Wert wizard:step_one:form_data:languages
in der Sitzung noch nicht vorhanden ist, verwenden Sie push
, um einen Sitzungsschlüssel zu erstellen und den Wert auf ein Array zu setzen, das die von Ihnen übergebenen Werte enthält.
laravel bietet auch einige praktische Helfermethoden, mit denen Sie die Werte in einer Sitzung erhöhen und verringern können:
Sie können den Wert in der Sitzung wie folgt erhöhen:
<code>$currentStep = session()->get(key: 'wizard:current_step');</code>
Wenn wir den oben genannten Code ausführen, erhöht sich der Sitzungswert wizard:current_step
, wenn er 3 ist, nun auf 4.
Sie können auch den Wert in der Sitzung wie folgt reduzieren:
<code>$currentStep = session()->get(key: 'wizard:current_step', default: 1);</code>
Wenn die Werte in der Sitzung noch nicht existieren, werden sie als 0 behandelt. Wenn Sie increment
auf dem leeren Sitzungswert aufrufen, wird der Wert auf 1 festgelegt. Rufen Sie decrement
auf den leeren Sitzungswert auf, setzen Sie den Wert auf -1.
Beide Methoden ermöglichen es Ihnen, die Anzahl der zu erhöhten oder verringenden Anzahl anzugeben:
<code>$currentStep = session()->pull(key: 'wizard:current_step');</code>
Sie können auch Daten aus der Sitzung mit der Methode forget
löschen:
<code>session()->put( key: 'wizard:step_one:form_data', value: [ 'name' => 'Ash Allen', 'email' => 'ash@example.com', ], );</code>
Ausführen des oben genannten Codes löscht Daten, die zur wizard:current_step
-Staste aus der Sitzung gehören.
Wenn Sie mehrere Schlüssel gleichzeitig löschen möchten, können Sie das Schlüsselarray an die Funktion forget
übergeben:
<code>session()->push( key: 'wizard:step_one:form_data:languages', value: 'javascript', );</code>
oder, wenn Sie alle Daten aus der Sitzung löschen möchten, können Sie die Funktion flush
verwenden:
<code>[ `php`, ]</code>
Laravel bietet auch einige bequeme Helferfunktionen, um zu überprüfen, ob Daten in der Sitzung vorhanden sind.
Sie können mit der Methode has
überprüft werden, ob in der Sitzung ein Schlüssel vorhanden ist und ob ihr Wert nicht null
:
<code>[ `php`, `javascript`, ]</code>
Wenn der Wert existiert und nicht null
ist, gibt der obige Code true
zurück. Wenn der Wert null
oder der Schlüssel nicht existiert, gibt er false
zurück.
In ähnlicher Weise können Sie auch die Methode exists
verwenden, um zu überprüfen, ob der Schlüssel in der Sitzung vorhanden ist (unabhängig davon, ob der Wert null ist):
<code>session()->increment(key: 'wizard:current_step');</code>
Sie können auch überprüfen, ob die Sitzung überhaupt nicht vorhanden ist:
<code>session()->decrement(key: 'wizard:current_step');</code>
Manchmal möchten Sie einige Daten in der Sitzung bestehen, jedoch nur für die nächste Anfrage. Zum Beispiel möchten Sie dem Benutzer eine Erfolgsbenachrichtigung zeigen, nachdem der Benutzer das Formular eingereicht hat.
, um dies zu tun, können Sie flash
Methode verwenden:
<code>session()->increment(key: 'wizard:current_step', amount: 2); session()->decrement(key: 'wizard:current_step', amount: 2);</code>
Wenn Sie den oben genannten Code in der nächsten Anfrage ausführen möchten, können Sie den Wert aus der Sitzung (mit etwas wie session()->get('success')
) für die Anzeige lesen. Löschen Sie es dann so, dass es in der nächsten Anfrage nicht verfügbar ist.
Es kann sein, dass Sie manchmal einige Flash -Daten haben (in einer früheren Anfrage hinzugefügt) und sie auf die nächste Anforderung beibehalten möchten.
Sie können alle Flash -Daten mit der Methode reflash
aktualisieren:
<code>session()->forget(keys: 'wizard:current_step');</code>
oder, wenn Sie nur einige Flash -Daten aufbewahren möchten, können Sie keep
Methode verwenden:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>
Ausführen des oben genannten Codes behält die Werte success
und error
Flash -Sitzung bei, löscht jedoch alle anderen Flash -Daten für die nächste Anforderung.
Bisher haben wir in unseren Beispielen nur die Helferfunktion session()
verwendet.
, aber Sie können auch die Fassade oder IlluminateSupportFacadesSession
-Klasse verwenden, um mit der Sitzung zu interagieren. IlluminateHttpRequest
Um die Fassade
zu verwenden, können Sie die Methode wie folgt aufrufen: Session
<code>$currentStep = session()->get(key: 'wizard:current_step');</code>Alternativ können Sie auf die Sitzung zugreifen, indem Sie die in die Controller -Methode injizierte
-Methode aufrufen. Angenommen, Sie haben die folgende Controller -Methode: IlluminateHttpRequest
session
<code>$currentStep = session()->get(key: 'wizard:current_step', default: 1);</code>
gehen Sie noch einen Schritt weiter
Wir werden jetzt einige mögliche Fallstricke abdecken und wie man sie vermeidet.
# typo in Sitzungsschlüssel
Bleiben Sie bei unserem Assistentenbeispiel, vorausgesetzt, wir möchten den aktuellen Schritt in der Sitzung speichern. Daher könnte unser Code so aussehen:
Dann möchten wir später in verschiedenen Teilen der Codebasis den aktuellen Schritt aus der Sitzung lesen:
<code>$currentStep = session()->pull(key: 'wizard:current_step');</code>
Hast du den Fehler gesehen, den ich gerade gemacht habe? Ich habe versehentlich versucht, die
<code>session()->put( key: 'wizard:step_one:form_data', value: [ 'name' => 'Ash Allen', 'email' => 'ash@example.com', ], );</code>-Staste anstelle der
-Staste zu lesen. wizard:step
wizard:current_step
Dies ist ein einfaches Beispiel, aber in großen Codebasen ist es einfach, solche Fehler zu machen. Diese offensichtlichen Fehler können auch am schwierigsten zu finden sein.
Ein nützlicher Weg, um diese Tippfehler zu vermeiden, besteht daher darin, Konstanten oder Methoden zur Generierung von Sitzungsschlüssel zu verwenden.
Wenn der Sitzungsschlüssel beispielsweise statisch ist, können Sie eine Konstante definieren (wahrscheinlich in der Sitzungsklasse, die wir später behandeln werden) wie folgt:
Dies bedeutet, dass wir die Anzahl der in der Codebasis verwendeten Rohschläge reduzieren, was die Anzahl der Tippfehler verringert.
<code>session()->push( key: 'wizard:step_one:form_data:languages', value: 'javascript', );</code>
Manchmal müssen Sie jedoch möglicherweise dynamische Sitzungsschlüssel generieren. Nehmen wir beispielsweise an, wir möchten, dass unser
-Staste ein Team -ID -Feld enthält. Wir können eine Methode erstellen, um den Schlüssel wie folgt zu generieren:
wizard:current_step
<code>[ `php`, ]</code>.
Eine weitere Falle, die ich beim Umgang mit einem Projekt sehe, das es schon seit einiger Zeit gibt, ist Sitzungsschlüsselkonflikt.
Stellen Sie sich zum Beispiel vor, dass Sie vor einigen Jahren einen Assistenten zum Erstellen neuer Benutzerkonten erstellt haben. Sie können also Sitzungsdaten wie folgt speichern:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>
Sie wurden jetzt zugewiesen, um eine neue Funktion zu erstellen, die auch einen Zauberer hat, und Sie haben den alten Zauberer und die von Ihnen verwendete Namenskonvention vollständig vergessen. Sie können versehentlich den gleichen Schlüssel für den neuen Assistenten verwenden, um Datenkonflikte zu verursachen und potenzielle Fehler einzuführen.
Um dies zu vermeiden, benutze ich den Funktionsnamen gerne als Präfix für den Sitzungsschlüssel. Für das Speichern von Assistentendaten zum Erstellen neuer Benutzer habe ich möglicherweise die folgenden Schlüssel:
new_user_wizard:current_step
new_user_wizard:step_one:form_data
new_user_wizard:step_two:form_data
Dann habe ich in meinem neuen Assistenten für die Erstellung eines neuen Teams die folgenden Schlüssel:
new_team_wizard:current_step
new_team_wizard:step_one:form_data
new_team_wizard:step_two:form_data
Wir werden erklären, wie diese Präfixe später in diesem Artikel der Sitzungsklasse hinzugefügt werden.
Können Sie mir sagen, wie der Datentyp in diesem Sitzungswert gespeichert ist?
<code>$currentStep = session()->get(key: 'wizard:current_step');</code>
Wenn Sie vermutet haben, dass es eine Instanz von AppDataTransferObjectsWizardsFormData
war, haben Sie Recht.
Nur reden und reden, ich möchte klarstellen, dass beim Lesen von Daten aus einer Sitzung nicht immer klar ist, welche Art von Daten Sie verwenden. Am Ende müssen Sie sich den Code ansehen, der die Daten in die Sitzung schreibt, um herauszufinden, was er ist. Dies kann ablenkend und zeitaufwändig sein und zu Fehlern führen.
Sie können dem Code, der Sitzungsdaten liest, Kommentare oder Dokumentblöcke hinzufügen. Aber das ist nur ein Hinweis. Wenn der Kommentar nicht auf dem neuesten Stand ist (wenn sich der Sitzungsdatentyp ändert), hilft er nicht und erhöht die Wahrscheinlichkeit von Fehlern.
Eine andere Methode, die ich gerne verwende, besteht darin, die Sitzungsdaten innerhalb der Methode zu lesen und den Rückgabetyp zur Methode hinzuzufügen. Auf diese Weise können Sie sicherstellen, dass der von Ihnen verwendete Datentyp korrekt ist. Es hilft auch Ihrer IDE und den Personen, die den Code lesen.
Schauen wir uns zum Beispiel diesen Code an:
<code>$currentStep = session()->get(key: 'wizard:current_step', default: 1);</code>
Wir können jetzt sehen, dass die stepOneFormData
-Methode eine AppDataTransferObjectsWizardsFormData
-Schunierung zurückgibt. Dies zeigt deutlich die Art der Daten, die wir verwenden. Wir können diese Methode dann im Controller so aufrufen:
<code>$currentStep = session()->pull(key: 'wizard:current_step');</code>
Wie wir in den vorherigen Abschnitten gesehen haben, gibt es bei der Verwendung von Sitzungen in Laravel einige einfache (aber allgemeine) Fallstricke.
Mit "Sitzungsklassen" kann jede dieser Fallen vermieden (oder zumindest reduziert) werden. Ich benutze gerne Sitzungsklassen, um die Sitzungsdatenverarbeitungslogik der Sitzung in Bezug auf eine einzelne Funktion an einem Ort zu verkörpern.
Angenommen, wir haben einen Assistenten zum Erstellen von Benutzern und einen anderen zum Erstellen von Teams. Ich werde für jeden dieser Assistenten eine Sitzungsklasse erstellen:
AppSessionsUsersNewUserWizardSession
AppSessionsTeamsNewTeamWizardSession
Mit der Sitzungsklasse können Sie:
Verwenden Sie diesen klassenbasierten Ansatz bei der Verarbeitung von Sitzungsdaten erspart mir unzählige Male bei der Arbeit mit großen Laravel-Projekten. Dies ist eine einfache Methode, die einen großen Einfluss haben kann.
Im vorherigen Beispiel habe ich bereits vorgeschlagen, eine Sitzungsklasse zu verwenden. Aber schauen wir uns einen tieferen Blick darauf an, wie ich diese Klassen gerne baue.
Angenommen, wir haben die folgende Sitzungsklasse für den neuen Benutzerassistenten. Auf den ersten Blick mag es ein bisschen überwältigend sein, aber schauen wir uns den Code an und brechen Sie ihn auf:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>
In der obigen AppSessionsUsersWizardSession
-Klasses definieren wir zunächst den Konstruktor, der die IlluminateContractsSessionSession
-Schelle akzeptiert. Auf diese Weise wird uns Laravel automatisch eine Sitzungsinstanz in uns injiziert, wenn wir die AppSessionsUsersWizardSession
-Klasse aus dem Service -Container analysieren. Ich werde Ihnen später zeigen, wie man das im Controller macht.
Wir definieren dann 5 grundlegende öffentliche Methoden:
getCurrentStep
- Kehren Sie zum aktuellen Schritt im Assistenten zurück. Wenn es keinen Setup -Schritt gibt, ist die Standardeinstellung 1
. setCurrentStep
- Aktuelle Schritte im Setup -Assistenten. setFormDataForStep
- Stellen Sie die Formulardaten für den angegebenen Schritt im Assistenten fest. Diese Methode nimmt die Schrittnummer und AppDataTransferObjectsWizardsUsersFormData
Beispiel an. getFormDataForStep
- Erhalten Sie die Formulardaten für den angegebenen Schritt im Assistenten. Diese Methode dauert eine Schrittnummer und gibt die AppDataTransferObjectsWizardsUsersFormData
-Stanz zurück oder wenn die Daten nicht vorhanden sind. null
flush
Der zusätzliche Vorteil der Verwendung dieser Schlüsselgenerierungsmethoden besteht darin, dass wir die Schlüssel profizieren können, um Konflikte zu vermeiden. In diesem Beispiel setzen wir das Präfix aller Schlüssel auf
mithilfe der sessionKey
-Methode. new_user_wizard:
Jetzt, da diese Klasse festgelegt ist, lassen Sie uns sehen, wie wir im Controller damit interagieren:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>
Wie wir im obigen Beispiel sehen, injizieren wir die AppSessionsUsersWizardSession
-Klasse in unsere Controller -Methode. Laravel wird die Sitzungsinstanz automatisch für uns analysieren.
Dann können wir damit interagieren, wie wir es mit jeder anderen Klasse tun würden.
Dies kann sich zunächst wie überstrakt anfühlen und erfordert mehr Code-Wartung. Wenn das Projekt wächst, sind Typ -Eingabeaufforderungen, Rückgabetypen, Schlüsselgenerierungsmethoden und sogar Benennungsmethoden (die Ihre Operationen beschreibender werden) sehr nützlich.
genau wie in jedem anderen Teil der Codebasis sollten Sie sicherstellen, dass Sie die Sitzungsdaten übernehmen, um sicherzustellen, dass die richtigen Felder gelesen und geschrieben werden.
Einer der großen Vorteile der Verwendung von Sitzungsklassen ist, dass Sie für jede Methode in der Klasse problemlos zentralisierte Tests für die Einheitstil schreiben können.
Zum Beispiel können wir einige Tests für die AppSessionsUsersWizardSession
-Methode der getFormDataForStep
-Klasse schreiben. Zur Erinnerung ist hier die Methode:
<code>$currentStep = session()->get(key: 'wizard:current_step');</code>
Wir können hier mehrere Szenarien testen:
AppDataTransferObjectsWizardsUsersFormData
-Objekt für den Schritt zurück. null
zurück. Unsere Testklasse kann so aussehen:
<code>$currentStep = session()->get(key: 'wizard:current_step', default: 1);</code>
In der obigen Testklasse haben wir zwei Tests, die die beiden zuvor erwähnten Fälle abdecken.
Diese Style -Tests sind ideal, um sicherzustellen, dass Ihre Sitzungsklasse korrekt konfiguriert ist, um Sitzungsdaten zu lesen und zu schreiben. Sie lassen Sie jedoch nicht unbedingt glauben, dass sie im Rest der Codebasis korrekt verwendet werden. Sie können beispielsweise getFormDataForStep(1)
aufrufen, und Sie sollten getFormDataForStep(2)
aufrufen.
Aus diesem Grund möchten Sie auch in Betracht ziehen, Sitzungsdaten in Ihren Funktionstests zu gründen (die, die Sie normalerweise für Ihren Controller schreiben).
Angenommen, Sie haben die folgende grundlegende Methode in Ihrem Controller, und es wird zum nächsten Schritt im Assistenten gehen:
<code>$currentStep = session()->pull(key: 'wizard:current_step');</code>
In der obigen Methode haben wir zuerst den aktuellen Schritt aus der Sitzung gelesen. Anschließend speichern wir die Formulardaten für den aktuellen Schritt in der Sitzung. Schließlich erhöhen wir den aktuellen Schritt und leiten zum nächsten Schritt im Assistenten um.
wir gehen davon aus, dass unsere AppHttpRequestsUsersWizardNextStepRequest
-Klasse für die Validierung der Formulardaten verantwortlich ist und die toDto
-Schelle zurückgibt, wenn wir die AppDataTransferObjectsWizardsUsersFormData
-Methode aufrufen.
wir gehen auch davon aus, dass die nextStep
Controller -Methode über eine Postanforderung an die /users/wizard/next-step
Route (mit dem Namen users.wizard.next-step
) zugegriffen werden kann.
Möglicherweise möchten wir den folgenden Test schreiben, um sicherzustellen, dass die Formulardaten in der Sitzung korrekt gespeichert sind:
<code>[ '_token' => 'bKmSfoegonZLeIe8B6TWvSm1dKwftKsvcT40xaaW' '_previous' => [ 'url' => 'https://my-app.com/users' ] '_flash' => [ 'old' => [ 'success', ], 'new' => [] ] 'success' => 'User created successfully.' 'current_team_id' => 123 ]</code>
Im obigen Test verwenden wir einige Formulardaten, um eine Postanforderung an die /users/wizard/next-step
-Route auszugeben. Sie können feststellen, dass wir withSession
verwenden. Mit dieser Methode können wir die Sitzungsdaten so festlegen, dass wir behaupten können, dass sie korrekt gelesen werden.
Wir behaupten dann, dass der Benutzer zum nächsten Schritt im Assistenten umgeleitet wird und dass der aktuelle Schritt in der Sitzung auf 3
festgelegt ist. Wir behaupten auch, dass die Formulardaten für Schritt 2
in der Sitzung korrekt gespeichert sind.
Wie wir in unseren Tests gesehen haben, haben wir auch auf zwei Arten aus der Sitzung gelesen:
assertSessionHas
, um zu überprüfen, ob die Sitzungsdaten korrekt festgelegt sind. session()
Helfer, um Sitzungsdaten direkt zu lesen. Beide Methoden funktionieren, sodass Sie entscheiden können, welche Sie bevorzugen. Ich habe beide Methoden im obigen Test verwendet, um Ihnen zu zeigen, dass Sie mehrere Optionen haben.
Ich hoffe, dieser Artikel hilft Ihnen, gut zu verstehen, welche Sitzungen sind und wie sie in Laravel arbeiten. Ich hoffe auch, dass sie Ihnen einige Ideen geben, wie Sie mit Sitzungsdaten mit klassenbasierten Methoden interagieren, um einige gemeinsame Fallstricke zu vermeiden.
Das obige ist der detaillierte Inhalt vonEin tiefes Eintauchen in Sessions in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!