上一篇文章轉載了其他博主關於tp6事件的例子,下來說說自己對事件的理解
----------------------------------------------------------------------
按照thinkphp官方文檔的解釋,事件其實不用寫event類,只需要寫個監聽類實現 handle() 方法,通過監聽標示(event.php文件配置或動態添加監聽)觸發即可。
下面操作下這樣的流程:
1.添加監聽類
可以命令: php think make:listener TestListen 其實就是建立一個類:
<?php namespace app\listener; class TestListener { /** * 事件監聽處理 * @return mixed */ public function handle() { echo "測試監聽...執行"; } }
2.配置監聽
在event.php 設置監聽 (數組形式給定一個監聽標示后邊跟監聽類數組)
<?php // 事件定義文件 return [ 'bind' => [ // 更多事件綁定 ], 'listen' => [ 'AppInit' => [], 'HttpRun' => [], 'HttpEnd' => [], 'LogLevel' => [], 'LogWrite' => [], // 更多事件監聽 'test' => ['app\listener\TestListener'], ], 'subscribe' => [ // 更多事件訂閱 ], ];
3.觸發事件
在控制器或其他業務里面觸發
<?php declare (strict_types = 1); namespace app\adminapi\controller\pc; use think\facade\Event; class Index { public function index() { //其他業務邏輯后下面要觸發一個事件 Event::trigger('test'); //return '您好!這是一個[pc--adminapi]示例應用'; } }

用tp6的話大多情況下我們是這樣用的.
=============================================================
借用一個事件的流程,我們下來使用事件類,在實現一個事件.

下來想用thinkphp6來實現這個機制 (這次用到事件類)
分析下圖片的流程:
我們可以定義一個: 打小孩事件類,然后觸發這個事件,后監聽類(監護人)執行處理方法.
1.創建打小孩事件 php think make:event HitChild
<?php declare (strict_types = 1); namespace app\event; class HitChild { public $evildoer; public function __construct($evildoer){ $this->evildoer = $evildoer; echo $this->evildoer."打小孩<br>"; } }
2.創建監聽類 php think make:listener ParentListener (監聽類要實現 處理方法handle) 這里監聽者和事件做一個綁定
<?php declare (strict_types = 1); namespace app\listener; class ParentListener { /** * 事件監聽處理 * * @return mixed */ public function handle(\app\event\HitChild $event) { // echo "檢測到".$event->evildoer."打我家小孩,我要報警!<br>"; } }
3.把事件綁定和事件監聽配置到event.php文件中
<?php // 事件定義文件 return [ 'bind' => [ 'hitchild' => 'app\event\HitChild', // 更多事件綁定 ], 'listen' => [ 'AppInit' => [], 'HttpRun' => [], 'HttpEnd' => [], 'LogLevel' => [], 'LogWrite' => [], // 更多事件監聽 'test' => ['app\listener\TestListener'], 'hitchild' => ['app\listener\ParentListener'], ], 'subscribe' => [ // 更多事件訂閱 ], ];
4.控制器中觸發事件
public function hitchild(){ //其他業務后,觸發事件 Event::trigger(app()->make(\app\event\Hitchild::class,["老王"])); return "controller--hitchild"; }

添加了事件類是不是可以把,事件觸發者的信息 傳遞給 處理方法~~
參考:https://www.cnblogs.com/1693977889zz/p/8389058.html
https://www.kancloud.cn/manual/thinkphp6_0/1037492
