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.
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.
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) Direktes Auslösen: Ereignisse direkt über die Methode „dispatch()“ der Systemklasse auslösen.
use thinkacadeEvent; // 触发 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 thinkacadeevent; // 通过容器内触发 UserRegistered 事件,可以传递参数 app('event')->trigger('UserRegistered', $userData);
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.
namespace appmiddleware; use thinkacadeEvent; 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.
'middleware' => [ // 注册全局钩子 ppmiddlewareMyMiddleware::class, // ... ]
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!