Heim  >  Artikel  >  PHP-Framework  >  ThinkPHP6-Ereignis- und Hook-Nutzungshandbuch: Auslösen und Überwachen implementieren

ThinkPHP6-Ereignis- und Hook-Nutzungshandbuch: Auslösen und Überwachen implementieren

WBOY
WBOYOriginal
2023-08-27 15:43:45885Durchsuche

ThinkPHP6-Ereignis- und Hook-Nutzungshandbuch: Auslösen und Überwachen implementieren

ThinkPHP6 Events and Hooks Usage Guide: Implementieren von Triggerung und Überwachung

Übersicht
Während des Entwicklungsprozesses müssen wir häufig einige Ereignisse verarbeiten, z. B. das Versenden von E-Mail-Erinnerungen nach erfolgreicher Benutzerregistrierung oder das Aktualisieren des Caches nach dem Produkt wird aus den Regalen entfernt usw. warten. Um diese Ereignisse besser verwalten zu können, bietet ThinkPHP6 Ereignis- und Hook-Mechanismen, wodurch das Auslösen und Überwachen von Ereignissen flexibler und bequemer wird.

1. Ereignisse und Zuhörer
Ereignisse beziehen sich auf Dinge, die während der Programmausführung passieren, wie z. B. erfolgreiche Benutzerregistrierung, erfolgreiche Auftragserteilung usw. Listener reagieren auf Ereignisse, d. h. führen bestimmte Vorgänge aus, nachdem ein Ereignis eintritt. Ereignisse und Listener werden in ThinkPHP6 mithilfe des Beobachtermodus verwaltet, der das Auslösen von Ereignissen und die entsprechenden Vorgänge entkoppelt.

  1. Ereignis-Listener registrieren
    In ThinkPHP6 können Sie Ereignis-Listener registrieren, indem Sie eine Listener-Klasse definieren. Die Listener-Klasse befindet sich im Verzeichnis app/listener. Beim Definieren müssen Sie die thinklistenerListener-Klasse erben und ihre handle()-Methode implementieren. Beispielsweise definieren wir eine UserRegisteredListener-Klasse, um auf Erfolgsereignisse bei der Benutzerregistrierung zu warten:
namespace applistener;

use thinklistenerListener;

class UserRegisteredListener extends Listener
{
    // 定义事件监听方法
    public function handle($event)
    {
        // 处理事件的操作
        // 比如发送邮件通知
        // ...
    }
}

In der handle()-Methode können Sie die Vorgänge schreiben, die ausgeführt werden müssen, nachdem das entsprechende Ereignis eintritt.

  1. Die entsprechende Beziehung zwischen registrierten Ereignissen und Listenern
    In ThinkPHP6 können Sie die entsprechende Beziehung zwischen Ereignissen und Listenern in der Ereignisdefinitionsdatei angeben. Die Ereignisdefinitionsdatei befindet sich in der Datei app/event.php und die entsprechende Beziehung zwischen Ereignissen und Listenern wird über ein Konfigurationsarray definiert.
return [
    'bind' => [
        'UserRegistered' => [
            'applistenerUserRegisteredListener',
        ],
    ],
];

Die obige Konfiguration gibt an, dass die handle()-Methode von UserRegisteredListener ausgelöst wird, wenn das Ereignis UserRegistered auftritt.

2. Ereignisse auslösen
Wenn ein Ereignis auftritt, können wir das System benachrichtigen, indem wir das Ereignis auslösen und dadurch den entsprechenden Listener ausführen.

  1. So lösen Sie Ereignisse aus
    ThinkPHP6 bietet zwei Möglichkeiten, Ereignisse auszulösen:

(1) Direktes Auslösen: Ereignisse direkt über die Methode „dispatch()“ der Systemklasse auslösen.

use thinkacadeEvent;

// 触发 UserRegistered 事件,可以传递参数
Event::dispatch('UserRegistered', $userData);

(2) Auslösen innerhalb des Containers: Lösen Sie das Ereignis über die event()-Methode des Containers aus. Wenn diese im Konstruktor aufgerufen wird, kann die automatische Abhängigkeitsinjektion verwendet werden.

use thinkacadeevent;

// 通过容器内触发 UserRegistered 事件,可以传递参数
app('event')->trigger('UserRegistered', $userData);
  1. Ereignisobjekt erstellen
    In der Ereignis-Listener-Verarbeitungsmethode können wir die Parameter empfangen, die übergeben werden, wenn das Ereignis ausgelöst wird, indem wir das Ereignisobjekt definieren. Durch das Erstellen eines Ereignisobjekts werden Parameter zur einfachen Verwendung in Listenern gekapselt.
namespace applistener;

use thinklistenerListener;
use appeventUserRegisteredEvent; // 引入事件类

class UserRegisteredListener extends Listener
{
    public function handle($event)
    {
        // 将传递的参数封装为事件对象
        $userRegisteredEvent = new UserRegisteredEvent($event);
        
        // 使用事件对象的属性
        $username = $userRegisteredEvent->username;
        // ...
    }
}

3. Hooks
Hooks sind einige im System reservierte Schlüsselknoten. Durch die Registrierung von Operationen auf den Hook-Knoten können die entsprechenden erweiterten Funktionen erreicht werden. Hook-Knoten befinden sich normalerweise in den Kernteilen des Systems, z. B. Anforderungsstart, Anforderungsende, Routenauflösung usw. Der Hook-Mechanismus in ThinkPHP6 wird durch Middleware implementiert, was eine flexiblere Steuerung des Prozesses ermöglicht.

  1. Hook registrieren
    In ThinkPHP6 können Hooks über Middleware registriert werden. Middleware erbt von der thinkMiddleware-Klasse. Sie können Middleware anpassen und entsprechende Vorgänge in der Middleware implementieren.
namespace appmiddleware;

use thinkacadeEvent;

class MyMiddleware
{
    public function handle($request, Closure $next)
    {
        // 钩子操作
        // ...

        return $next($request);
    }
}

In der obigen handle()-Methode können Sie die Operationen schreiben, die der entsprechende Hook-Knoten ausführen muss. Nachdem die Middleware registriert wurde, kann sie in die globale Middleware oder Routing-Middleware des Systems konfiguriert werden.

  1. Globale Hooks registrieren
    Globale Hooks beziehen sich auf Hooks, die während des gesamten Systemanforderungslebenszyklus ausgelöst werden. In ThinkPHP6 können globale Hooks über das Middleware-Konfigurationselement in der Datei config/app.php registriert werden.
'middleware' => [
    // 注册全局钩子
    ppmiddlewareMyMiddleware::class,
    // ...
]
  1. Routing-Hook registrieren
    Ein Routing-Hook ist ein Hook, der nur ausgelöst wird, wenn eine bestimmte Route übereinstimmt. In ThinkPHP6 können Routing-Hooks registriert werden, indem Middleware in der Route angegeben wird.
Route::rule('index', 'index/index')->middleware(ppmiddlewareMyMiddleware::class);

4. Zusammenfassung
Durch den Ereignis- und Hook-Mechanismus können wir Ereignisse, die im Programm auftreten, flexibler verarbeiten und entsprechende Vorgänge ausführen, nachdem das Ereignis eintritt. In ThinkPHP6 können wir auf Ereignisse warten, indem wir Listener registrieren und bestimmte Vorgänge ausführen, wenn Ereignisse auftreten. Gleichzeitig können wir auch Middleware registrieren, um entsprechende Hooks zu implementieren und eine verfeinerte Prozesssteuerung zu erreichen.

Auf diese Weise können wir verschiedene Teile des Systems entkoppeln und trennen und die Skalierbarkeit und Wartbarkeit des Systems verbessern.

Das Obige ist der relevante Inhalt des ThinkPHP6-Handbuchs zur Verwendung von Ereignissen und Hooks. Ich hoffe, es wird Ihnen helfen, den Ereignis- und Hook-Mechanismus in ThinkPHP6 zu verstehen und anzuwenden.

Das obige ist der detaillierte Inhalt vonThinkPHP6-Ereignis- und Hook-Nutzungshandbuch: Auslösen und Überwachen implementieren. 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