Heim  >  Artikel  >  PHP-Framework  >  Wie verwende ich Middleware für die Anforderungsverarbeitung in ThinkPHP6?

Wie verwende ich Middleware für die Anforderungsverarbeitung in ThinkPHP6?

WBOY
WBOYOriginal
2023-06-12 12:25:402378Durchsuche

In ThinkPHP6 ist Middleware ein häufig verwendetes Tool zur Anforderungsverarbeitung. Durch Middleware können wir Anfragen einfach verarbeiten, um Berechtigungskontrolle, Protokollierung, Anforderungsüberprüfung und andere Funktionen zu implementieren und so die Sicherheit und Wartbarkeit von Anwendungen zu verbessern. In diesem Artikel wird erläutert, wie Sie Middleware für die Anforderungsverarbeitung in ThinkPHP6 verwenden.

1. Was ist Middleware?

Middleware ist ein unabhängiger Anfragehandler, der vom Client gesendete Anfragen abfangen und verarbeiten kann. In ThinkPHP6 basiert die Middleware auf der PSR-15-Spezifikation. Mithilfe der Middleware können wir Anforderungen vor- oder nachbearbeiten, um einige allgemeine Funktionen wie Anmeldeüberprüfung, Berechtigungskontrolle, Anforderungsfilterung, Antwortverarbeitung usw. zu implementieren.

2. Verwendung der ThinkPHP6-Middleware

  1. Middleware erstellen

In ThinkPHP6 können Sie schnell Middleware über Befehlszeilentools erstellen. Verwenden Sie den folgenden Befehl, um eine Middleware mit dem Namen CheckAuth im Verzeichnis app/middleware zu erstellen.

php think make:middleware CheckAuth

Die erstellte CheckAuth-Middleware-Klasse lautet wie folgt:

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next)
    {
        // 执行中间件操作

        return $next($request);
    }
}

Im obigen Code muss die Middleware-Klasse die Handle-Methode enthalten. Die Handle-Methode akzeptiert zwei Parameter: $request und $next, wobei $request das Anforderungsobjekt und $next die Verarbeitungsmethode der nächsten Middleware oder des nächsten Controllers ist. In der Handle-Methode können wir eine Vorverarbeitung für das $request-Objekt durchführen und dann return $next($request) verwenden, um die Verarbeitungsmethode der nächsten Middleware oder des nächsten Controllers aufzurufen.

  1. Middleware registrieren

Nachdem Sie die Middleware erstellt haben, müssen Sie sie in der Anwendung registrieren. In ThinkPHP6 kann Middleware über Anwendungskonfiguration, Routendefinition und Controller-Annotation registriert werden.

2.1 Anwendungskonfiguration

Sie können globale Middleware konfigurieren oder Middleware bei Bedarf in der Konfigurationsdatei config/app.php der Anwendung festlegen.

// 全局中间件
'middleware' => [
    appmiddlewareCheckAuth::class,
],

// 按需设置中间件
'route' => [
    // Route::group 也支持
    'blog/detail' => ['appmiddlewareCheckAuth'],
]

Im obigen Code kann Middleware mithilfe des Middleware-Konfigurationselements global registriert werden. Der Klassenname jeder Middleware wird durch Kommas getrennt. Im Routenkonfigurationselement kann Middleware für verschiedene Routen angegeben werden.

2.2 Routendefinition

Sie können Middleware in der Route::rule-Methode oder der Route::group-Methode angeben.

use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')->middleware('appmiddlewareCheckAuth');

Im obigen Code haben wir die Middleware-Methode hinzugefügt, um die Middleware beim Aufruf der Route::rule-Methode anzugeben.

2.3 Controller-Anmerkungen

Sie können Middleware in Controller-Anmerkungen angeben.

namespace appcontroller;

/**
 * @middleware(appmiddlewareCheckAuth::class)
 */
class Blog
{
    public function detail()
    {
        // 控制器的处理逻辑
    }
}

Im obigen Code haben wir das Middleware-Attribut zur Controller-Annotation hinzugefügt, um die Middleware anzugeben.

  1. Ausführungsreihenfolge der Middleware

In ThinkPHP6 wird Middleware in der Reihenfolge der Registrierung ausgeführt, zuerst registriert und ausgeführt und dann registriert und ausgeführt.

In Anwendungskonfigurations- und Controller-Annotationen können wir die Middleware::class-Methode verwenden, um die Ausführungsreihenfolge der Middleware anzugeben. Wie unten gezeigt:

// 全局中间件按照顺序执行
'middleware' => [
    appmiddlewareLog::class,
    appmiddlewareCheckAuth::class,
],

// 按需设置中间件按照顺序执行
'route' => [
    'blog/detail' => ['appmiddlewareLog', 'appmiddlewareCheckAuth']
],

// 控制器注解中间件按照顺序执行
namespace appcontroller;

/**
 * @middleware([appmiddlewareLog::class, appmiddlewareCheckAuth::class])
 */
class Blog
{
    public function detail()
    {
        // 控制器的处理逻辑
    }
}

Im obigen Code haben wir die Middleware::class-Methode in der Reihenfolge der Middleware-Registrierung angegeben.

  1. Parameterübergabe der Middleware

Middleware kann Daten durch Parameterübergabe austauschen. In der Handle-Methode können wir dem $request-Objekt Eigenschaften, Methoden oder Parameter hinzufügen und das $request-Objekt dann an die nächste Middleware oder den nächsten Controller übergeben, um eine Datenfreigabe zu erreichen.

Im folgenden Beispiel definieren wir beispielsweise das Attribut $name in der ersten Middleware und übergeben es an die zweite Middleware und den Controller, damit diese das Attribut verwenden können.

<?php

namespace appmiddleware;

class CheckAuth
{
    public function handle($request, Closure $next, $name)
    {
        $request->name = $name;

        return $next($request);
    }
}

class Log
{
    public function handle($request, Closure $next)
    {
        echo 'name:' . $request->name . '<br>';
        return $next($request);
    }
}

namespace appcontroller;

class Blog
{
    public function detail(Request $request)
    {
        echo 'name:' . $request->name . '<br>';
        // 控制器的处理逻辑
    }
}

// 路由配置文件
use thinkacadeRoute;

Route::rule('blog/detail', 'blog/detail', 'GET')
->middleware(['appmiddlewareCheckAuth:name', 'appmiddlewareLog']);

Im obigen Code definieren wir das $name-Attribut in der Handle-Methode der CheckAuth-Klasse und speichern es im $request-Objekt. Sowohl in der Handle-Methode der Log-Klasse als auch im Blog-Controller können wir über das $request-Objekt auf diese Eigenschaft zugreifen.

In der Routendefinition verwenden wir die Parameterübergabefunktion der Middleware, um den Parameternamen an die CheckAuth-Middleware zu übergeben. In den Einstellungen der On-Demand-Middleware können Sie auch die Methode Middleware::class verwenden, um Middleware-Parameter anzugeben.

5. Zusammenfassung

Middleware ist ein häufig verwendetes Anfrageverarbeitungstool, das Kundenanfragen vor und nach der Anfrage vor- oder nachbearbeiten kann. In ThinkPHP6 basiert die Middleware auf der PSR-15-Spezifikation. Mithilfe der Middleware können wir problemlos Funktionen wie Berechtigungskontrolle, Protokollierung und Anforderungsüberprüfung implementieren. Middleware wird in der Reihenfolge der Registrierung ausgeführt, und Daten können durch Parameterübergabe zwischen Middleware ausgetauscht werden. Durch den flexiblen Einsatz von Middleware können wir die Sicherheit, Wartbarkeit und Skalierbarkeit von Anwendungen verbessern.

Das obige ist der detaillierte Inhalt vonWie verwende ich Middleware für die Anforderungsverarbeitung in ThinkPHP6?. 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