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.
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:
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.
Der folgende Code demonstriert die Elemente einer Middleware-Funktion:
$app->use(function ($req, $res, $next) { $next(); });
Wo:
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(); };
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.
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!'); });
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.
Eine Lithe-Anwendung kann die folgenden Arten von Middleware verwenden:
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(); });
Im folgenden Beispiel verarbeitet Middleware eine GET-Anfrage an den Pfad /user/:id:
$myLogger = function ($req, $res, $next) { echo 'LOGGED'; $next(); };
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!'); });
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(); });
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'); });
Eine Liste der Middleware von Drittanbietern, die häufig mit Lithe verwendet wird, finden Sie in der Ressource „Middleware von Drittanbietern“.
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;
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);
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!