In unserem vorherigen Projekt war es nicht der beste Ansatz, eine Ansicht direkt aus der POST-Anfrage zurückzugeben, wenn die Validierung fehlschlug.
Wenn ein Benutzer ein Anmeldeformular mit ungültigen Daten sendet, zeigt das Formular Fehlermeldungen an und leitet den Benutzer zur Anmeldeseite weiter. Wenn der Benutzer jedoch die Seite aktualisiert oder wegnavigiert und zur Anmeldeseite zurückkehrt, bleiben dieselben Fehlermeldungen bestehen.
Um dieses Problem zu beheben, können wir Sitzungen verwenden, um Fehler zu speichern und das PRG-Muster zu implementieren. Wir können Fehler in der superglobalen Variablen $_SESSION speichern und die Fehleranweisung in create.php aktualisieren als:
$_SESSION['errors'] = $form->errors(); view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);?? [] ]);
Aber selbst mit dieser Änderung besteht das Problem weiterhin. Um dieses Problem zu lösen, müssen wir die Return-Anweisung wie folgt ändern:
return redirect ('/login');Return Redirect ('/login');
l
Wenn ein Fehler aufgetreten ist, wird der Benutzer zur Anmeldeseite weitergeleitet, der Fehler wird dem Benutzer jedoch nicht angezeigt.
Anschließend flashen wir die superglobale Variable $_SESSION, um die Sitzung nach kurzer Zeit zu zerstören:
$_SESSION['_flashed']['errors'] = $form->errors();
Jetzt können Sie feststellen, dass das Problem gelöst ist, aber um diesen Code umzugestalten, müssen wir die PRG-Methode in einer Klasse hinzufügen
Zum Refactoring erstellen wir eine neue Datei mit dem Namen Core/Session.php, die eine Session-Klasse enthält, die Benutzersitzungen verwaltet:
- Die Flash-Methode speichert Daten im Array $_SESSION['_flash'], das für das Flashen der Sitzung verwendet wird.
- Die Get-Methode prüft, ob in $_SESSION['_flash'] geflashte Daten vorhanden sind, und gibt diese zurück. Wenn nicht, werden die regulären Sitzungsdaten oder der Standardwert zurückgegeben.
- Die Unflash-Methode löscht die geflashten Daten und macht sie nur für die nächste Anfrage verfügbar.
- Das PRG-Muster wird implementiert, indem Daten in der Sitzung mithilfe der Put-Methode gespeichert, umgeleitet werden (z. B. mithilfe von Return Redirect('/login');) und dann die Daten in der nächsten Anforderung mithilfe der Get-Methode abgerufen werden.
Durch die Verwendung dieser Session-Klasse können wir das PRG-Muster und das Session-Flashing implementieren, um Benutzersitzungen zu verwalten und doppelte Formularübermittlungen sowie unerwünschte Persistenz von Fehlermeldungen zu verhindern.
hat Methode
In dieser Datei gibt die Methode has einen booleschen Wert zurück, der angibt, ob in der Sitzung ein Schlüssel vorhanden ist:
. public static function has($key) { return (bool) static::get($key); }Refactoring der Abmeldefunktion
In der Datei function.php überarbeiten wir die Abmeldefunktion, um die Session-Klasse zu verwenden:
Session::destroy();Refactoring der get-Methode
Da das Projekt bereits gut funktioniert. Aber wir müssen die get-Methode in Core/Session.php umgestalten, um den Code in einer einzigen Anweisung zu konsolidieren:
public static function get($key, $default = null) { return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default; }In unserem heutigen Projekt wird viel Refactoring durchgeführt, um das Aussehen und die Verständlichkeit zu verbessern und die Leistung des Codes zu steigern.
Ich hoffe, dass Sie es klar verstanden haben!.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3