Middleware ist ein Software-Designmuster, das eine nahtlose Kommunikation und einen nahtlosen Datenaustausch zwischen verschiedenen Systemen, Anwendungen oder Diensten ermöglicht. Es spielt eine entscheidende Rolle bei der Erleichterung der Interaktion zwischen unterschiedlichen Komponenten, beim Hinzufügen von Funktionalität und bei der Verbesserung der Gesamtsystemleistung.
In unserem vorherigen Projekt ist ein Problem aufgetreten, bei dem ein angemeldeter Benutzer beim Besuch der Registrierungsseite aufgefordert wurde, sich erneut zu registrieren. Dies lag an der fehlenden Middleware-Implementierung, was zu einer schlechten Benutzererfahrung führte.
In PHP kann Middleware verwendet werden, um Benutzerregistrierungs- und Anmeldefunktionen zu verwalten und so ein reibungsloses Benutzererlebnis zu gewährleisten. Middleware fungiert als Brücke zwischen verschiedenen Komponenten und ermöglicht nahtlose Kommunikation und Datenaustausch.
if ($_SESSION['user'] ?? false){ header('location: /'); exit(); }
Es wird überprüft, ob der Benutzer angemeldet ist oder nicht. Wenn nicht, beenden Sie das Skript, um einen authentifizierten Benutzer zu finden.
In der Datei „routes.php“ können wir der Route einen „Gast“-Schlüssel hinzufügen, um sie mit der Middleware zu verknüpfen:
$router->get('/register', 'controllers/registration/create.php')->only('guest');
Um zu überprüfen, ob das Projekt wie erwartet funktioniert, können Sie in der einzigen Methode eine Debug-Anweisung hinzufügen:
public function only($key){ dd($key); }
Es wird ein Fehler angezeigt, da die einzige Methode nicht mit einem Nullwert arbeiten kann, da sie mit der Get-Methode verknüpft ist und keinen Wert zurückgibt. Also müssen wir die Methode neu schreiben.
Um alle Werte an die einzige Methode zurückzugeben, müssen wir die Add-Methode in der Datei router.php wie folgt umschreiben:
public function add($method, $uri, $controller) { $this->routes[] = [ 'uri' => $uri, 'controller' => $controller, 'method' => $method, 'middleware'=>null ]; return $this; }
Jetzt können wir sehen, dass das Projekt gut funktioniert.
Die einzige Methode in der Datei router.php muss geändert werden, um den Middleware-Schlüssel zu akzeptieren:
public function only($key){ $this->routes[array_key_last($this->routes)]['middleware']=$key; return $this; }
In der Datei create.php können wir mithilfe der Middleware überprüfen, ob der Benutzer angemeldet oder ein Gast ist:
if ($route['middleware']==='guest'){ if($_SESSION['user'] ?? false){ header('location: /'); exit(); } } if ($route['middleware']==='auth'){ if(! $_SESSION['user'] ?? false){ header('location: /'); exit(); } }
Nur authentifizierte Benutzer können auf alle Seiten zugreifen, während der Gast nur auf die begrenzten Seiten zugreifen kann.
Um unsere Middleware-Klassen zu organisieren, erstellen Sie im Kernordner ein neues Verzeichnis mit dem Namen Middleware. Da wir zu unserer Entspannung irgendwann Änderungen vornehmen müssen, um Aufwand und Zeit zu sparen. Dadurch können wir unser Projekt verständlicher machen. Erstellen Sie darin 3 verschiedene Klassen.
Die Datei Authenticated.php prüft, ob der Benutzer angemeldet ist und leitet zur Startseite weiter, wenn dies zutrifft:
<?php namespace Core\Middleware; class Authenticated { public function handle() { if (! $_SESSION['user'] ?? false) { header('location: /'); exit(); } } }
Die Guest.php-Datei prüft, ob der Benutzer nicht angemeldet ist und leitet zur Startseite weiter, wenn dies zutrifft:
<?php namespace Core\Middleware; class Guest { public function handle() { if ($_SESSION['user'] ?? false) { header('location: /'); exit(); } } }
Die Datei Middleware.php verwendet eine MAP-Konstante, um Middleware-Schlüssel ihren jeweiligen Klassen zuzuordnen. Überprüft außerdem, ob die Middleware vorhanden ist oder nicht. Wenn nicht, zeigen Sie dem Benutzer eine nicht abgefangene Ausnahme an, um Middleware im Projekt hinzuzufügen:
<?php namespace Core\Middleware; class Middleware { public const MAP = [ 'guest' => Guest::class, 'auth' => Authenticated::class ]; public static function resolve($key) { if (!$key) { return; } $middleware = static::MAP[$key] ?? false; if (!$middleware) { throw new \Exception("No matching middleware found for key '{$key}'."); } (new $middleware)->handle(); } }
Jetzt können wir sehen, dass unser Projekt durch diese Änderungen gut funktioniert.
Ich hoffe, dass Sie es klar verstanden haben.
Das obige ist der detaillierte Inhalt vonEinführung in Middleware. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!