„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Middleware in Lithe: Wie sie funktioniert und wie Sie Ihre eigene erstellen

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

Veröffentlicht am 08.11.2024
Durchsuche:518

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.
  • Rufen Sie die nächste Middleware im Stapel auf.

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

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

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 \Lithe\App 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 gibt einfach eine Nachricht aus 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 fügen Middleware auf Anwendungsebene mit den Methoden use() oder METHOD() an eine Instanz der Anwendung an, wobei METHOD in Kleinbuchstaben auf die HTTP-Methode (z. B. GET, PUT, POST) verweist.

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

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

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

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

Middleware auf Router-Ebene

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

$router = new \Lithe\Http\Router;

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

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

$router = new \Lithe\Http\Router;

$router->use(function ($req, $res, $next) {
    echo 'Time: ', Date('H:i:s'), '
'; $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);

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 \Lithe\Middleware\Session\session:

use function Lithe\Middleware\Session\session;

$app = new \Lithe\App;

$app->use(session([
    'secure' => true
]));

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:





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

$app->use(my_middleware(['option1' => '1', 'option2' => '2']));

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.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/lithephp/middleware-in-lithe-how-it-works-and-how-to-create-your-own-3h67?1 Wenn es einen Verstoß gibt, bitte Kontaktieren Sie Study_golang@163 .comdelete
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3