Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in Middleware

Einführung in Middleware

WBOY
WBOYOriginal
2024-07-18 16:59:52541Durchsuche

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(); 
}

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');

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); 
}

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; 
}

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; 
}

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(); 
    } 
}

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(); 
        } 
    } 
}

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(); 
        } 
    } 
}

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(); 
    } 
}

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!

Stellungnahme:
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