Middleware in Lithe: Wie sie funktioniert und wie Sie Ihre eigene erstellen

DDD
Freigeben: 2024-10-25 03:28:29
Original
418 Leute haben es durchsucht

Middleware in Lithe: How It Works and How to Create Your Own

Middleware bietet einen praktischen Mechanismus zum Überprüfen und Filtern von HTTP-Anfragen, die in Ihre Anwendung eingehen. Lithe enthält beispielsweise Middleware, die prüft, ob der Benutzer authentifiziert ist. Wenn nicht, leitet die Middleware den Benutzer zum Anmeldebildschirm weiter. Wenn der Benutzer authentifiziert ist, lässt die Middleware die Fortsetzung der Anfrage zu.

Wie Middleware in Lithe funktioniert

In Lithe sind Middleware Funktionen mit Zugriff auf das Anforderungsobjekt ($req), das Antwortobjekt ($res) und die $next-Funktion im Anforderungs-Antwort-Zyklus der Anwendung. Wenn die Funktion $next aufgerufen wird, ruft sie die nächste Middleware im aktuellen Stapel auf.

Middleware-Funktionen bieten eine bequeme Möglichkeit, eingehende HTTP-Anfragen an Ihre Anwendung zu überprüfen, zu filtern und zu bearbeiten. Sie können:

  • Führen Sie einen beliebigen Code aus.
  • Ändern Sie die Anforderungs- und Antwortobjekte.
  • Beenden Sie den Anfrage-Antwort-Zyklus.
  • Nächste Middleware im Stapel aufrufen.

Wenn die aktuelle Middleware den Anfrage-Antwort-Zyklus nicht beendet, muss sie $next() aufrufen, um die Kontrolle an die nächste Middleware zu übergeben. Andernfalls bleibt die Anfrage ausstehend.


Elemente einer Middleware-Funktion

Der folgende Code demonstriert die Elemente einer Middleware-Funktion:

$app->use(function ($req, $res, $next) {
    $next();
});
Nach dem Login kopieren
Nach dem Login kopieren

Wo:

  • $req: HTTP-Anfrageargument, üblicherweise $req.
  • genannt
  • $res: HTTP-Antwortargument, üblicherweise $res.
  • genannt
  • $next: Callback-Argument, üblicherweise $next genannt.

Middleware definieren

Hier ist ein einfaches Beispiel einer Middleware namens myLogger. Diese Middleware gibt die Nachricht LOGGED jedes Mal aus, wenn eine Anfrage sie durchläuft. Es ist als Funktion definiert, die einer Variablen namens myLogger:
zugewiesen ist

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie den $next()-Aufruf oben. Diese Funktion ruft die nächste Middleware in der Anwendung auf. $next() ist keine integrierte PHP- oder Lithe-Funktion, sondern das dritte Argument, das an die Middleware-Funktion übergeben wird. Obwohl $next() ein beliebiger Name sein könnte, wird es laut Konvention immer „next“ genannt. Um Verwirrung zu vermeiden, halten Sie sich an diese Konvention.

Stellen Sie sich Middleware als eine Reihe von „Schichten“ vor, die HTTP-Anfragen durchlaufen, bevor sie Ihre Anwendung erreichen. Jede Ebene kann die Anfrage prüfen oder ablehnen.


Laden der Middleware

Um Middleware zu laden, rufen Sie die Methode use() der Klasse LitheApp auf und geben dabei die Middleware-Funktion an. Zum Beispiel:

$app = new \Lithe\App;

$myLogger = function ($req, $res, $next) {
    echo 'LOGGED';
    $next();
};

$app->use($myLogger);

$app->get('/', function ($req, $res, $next) {
    $res->send('Hello World!');
});
Nach dem Login kopieren
Nach dem Login kopieren

Immer wenn die App eine Anfrage erhält, wird die Meldung „LOGGED“ gedruckt. Die Reihenfolge beim Laden der Middleware ist wichtig: Die zuerst geladenen werden zuerst ausgeführt.

Die myLogger-Middleware druckt einfach eine Nachricht und leitet die Anfrage dann mit $next() an die nächste Middleware weiter.


Verwendung von Middleware

Eine Lithe-Anwendung kann die folgenden Arten von Middleware verwenden:

  • Middleware auf Anwendungsebene
  • Middleware auf Router-Ebene
  • Middleware von Drittanbietern

Middleware auf Anwendungsebene

Sie hängen Middleware auf Anwendungsebene an eine Instanz der Anwendung an, indem Sie die Methoden use() oder METHOD() verwenden, wobei METHOD sich in Kleinbuchstaben auf die HTTP-Methode (z. B. GET, PUT, POST) bezieht.

Dieses Beispiel zeigt Middleware ohne Pfad. Die Middleware wird jedes Mal ausgeführt, wenn eine Anfrage eingeht:

$app->use(function ($req, $res, $next) {
    $next();
});
Nach dem Login kopieren
Nach dem Login kopieren

Im folgenden Beispiel verarbeitet Middleware eine GET-Anfrage an den Pfad /user/:id:

$myLogger = function ($req, $res, $next) {
  echo 'LOGGED';
  $next();
};
Nach dem Login kopieren
Nach dem Login kopieren

Middleware auf Router-Ebene

Middleware auf Router-Ebene funktioniert wie Middleware auf Anwendungsebene, ist jedoch an eine Instanz von LitheHttpRouter angehängt:

$app = new \Lithe\App;

$myLogger = function ($req, $res, $next) {
    echo 'LOGGED';
    $next();
};

$app->use($myLogger);

$app->get('/', function ($req, $res, $next) {
    $res->send('Hello World!');
});
Nach dem Login kopieren
Nach dem Login kopieren

Sie laden Middleware auf Router-Ebene mit den Funktionen use() und METHOD().

Hier ist ein Beispiel für Middleware auf Router-Ebene:

$app->use(function ($req, $res, $next) {
    echo 'Hello World!';
    $next();
});
Nach dem Login kopieren

Middleware von Drittanbietern

Sie können Middleware von Drittanbietern verwenden, um Ihren Lithe-Anwendungen Funktionen hinzuzufügen. Installieren Sie das erforderliche PHP-Modul und laden Sie es dann auf Anwendungs- oder Routerebene.

Hier ist ein Beispiel für das Laden von Sitzungs-Middleware mit LitheMiddlewareSessionsession:

$app->get('/user/:id', function ($req, $res, $next) {
    if ($req->param('id') === '0') {
        return $next();
    } 
    $res->send('ID is not 0');
}, function ($req, $res) {
    $res->send('regular');
});
Nach dem Login kopieren

Eine Liste der Middleware von Drittanbietern, die häufig mit Lithe verwendet wird, finden Sie in der Ressource „Middleware von Drittanbietern“.


Konfigurierbare Middleware

Wenn Ihre Middleware konfigurierbar sein soll, können Sie eine Funktion erstellen, die eine Reihe von Optionen oder anderen Parametern akzeptiert und dann die Middleware-Implementierung basierend auf diesen Parametern zurückgibt. Siehe das Beispiel unten:

$router = new \Lithe\Http\Router;
Nach dem Login kopieren

Jetzt können Sie die Middleware mit benutzerdefinierten Konfigurationen verwenden:

$router = new \Lithe\Http\Router;

$router->use(function ($req, $res, $next) {
    echo 'Time: ', Date('H:i:s'), '<br>';
    $next();
});

$router->get('/user/:id', function ($req, $res, $next) {
    if ($req->param('id') === '0') {
        $res->redirect('/');
    }
    $next();
}, function ($req, $res) {
    echo $req->param('id');
    $res->render('special');
});

$app->use('/api', $router);
Nach dem Login kopieren

Um Middleware zu erstellen, die andere Entwickler über Composer installieren können, gibt es ein Paket namens lithemod/flow. Es bietet Schnittstellen und Dienstprogramme für die Verarbeitung von HTTP-Anfragen und -Antworten in Lithe, was die Erstellung standardisierter und gebrauchsfertiger Middlewares für verschiedene Anwendungen erleichtert.

lithemod/flow hilft beim Aufbau robuster Middlewares, indem es eine einheitliche Schnittstelle für Anfrage und Antwort bereitstellt, wodurch die Entwicklung effizienter und organisierter wird. Dies vereinfacht die Integration Ihrer Middleware in andere Projekte und stellt sicher, dass der Code einheitlichen Standards folgt.

Das obige ist der detaillierte Inhalt vonMiddleware in Lithe: Wie sie funktioniert und wie Sie Ihre eigene erstellen. 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!