Heim > Backend-Entwicklung > PHP-Tutorial > Einführung in Middleware

Einführung in Middleware

WBOY
Freigeben: 2024-07-18 16:59:52
Original
561 Leute haben es durchsucht

Intro to Middleware

Was ist Middleware?

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.

Das Problem

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.

Middleware in PHP

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(); 
}
Nach dem Login kopieren

Es wird überprüft, ob der Benutzer angemeldet ist oder nicht. Wenn nicht, beenden Sie das Skript, um einen authentifizierten Benutzer zu finden.

Routenkonfiguration

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');
Nach dem Login kopieren

Debuggen der einzigen Methode

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); 
}
Nach dem Login kopieren

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.

Umschreiben der Add-Methode

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; 
}
Nach dem Login kopieren

Jetzt können wir sehen, dass das Projekt gut funktioniert.

Nur Methode

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; 
}
Nach dem Login kopieren

Middleware-Check

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(); 
    } 
}
Nach dem Login kopieren

Nur ​​authentifizierte Benutzer können auf alle Seiten zugreifen, während der Gast nur auf die begrenzten Seiten zugreifen kann.

Erstellen eines Middleware-Verzeichnisses

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.

Authentifizierungs-Middleware

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(); 
        } 
    } 
}
Nach dem Login kopieren

Gast-Middleware

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(); 
        } 
    } 
}
Nach dem Login kopieren

Middleware-Klasse

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(); 
    } 
}
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage