Yii2 event tigger 关于事件的简单使用
首先需要明白事件是什么?在什么情況下使用?使用它帶來了什么好處?
基于官方?https://www.yiiframework.com/doc/guide/2.0/zh-cn/concept-events
1、什么是事件
官方解釋:事件可以將自定義代碼“注入”到現有代碼中的特定執行點。 附加自定義代碼到某個事件,當這個事件被觸發時,這些代碼就會自動執行。 例如,郵件程序對象成功發出消息時可觸發?messageSent?事件。 如想追蹤成功發送的消息,可以附加相應追蹤代碼到?messageSent?事件
個人理解:就是一個監聽者模式的實現,即現定義一個事件名稱,比方說定義一個跑的名稱,然后去注冊跑的時候都做什么動作,最后在去觸發跑的操作
2、在什么情況下使用
為什么要使用事件呢?
比方說業務的主線是注冊用戶,然后登陸,注冊成功,給用戶推送一條注冊成功的通知,然后給用戶發送優惠券通知,密碼更改通知,推送郵箱通知等等等等,如果業務不再需要了,刪除,挨個的刪除業務嗎?,那代碼怎么辦呢?不停的增加靜態方法調用嗎?或者推送各種隊列?還是全部業務都堆積到當前方法呢?
換成上邊的方法來試一下,先定義一個register的名字,然后給它注冊各種方法,最后在注冊成功的節點,觸發一下此事件就可以了
如何在yii2中使用呢?下面介紹用法
Yii 引入了名為?yii\base\Component?的基類以支持事件。 如果一個類需要觸發事件就應該繼承?yii\base\Component?或其子類。因為yii的類幾乎都繼承于這個所以可以在當前控制器或者model中直接使用
1、定義名字很簡單
const EVENT_NAME = "EVENT_NAME";
2、綁定事件
// 處理器是全局函數
$this->on(self::EVENT_NAME, 'function_name');
// 處理器是對象方法
$this->on(self::EVENT_NAME, [$object, 'methodName']);
// 處理器是靜態類方法
$this->on(self::EVENT_NAME, ['app\components\Bar', 'methodName']);
// 處理器是匿名函數
$this->on(self::EVENT_NAME, function ($event) {
? ? //事件處理邏輯
});
第三步:觸發此事件
我先定義了一個繼承類來存放我需要的參數
use yii\base\Event;class SuccessEvent extends Event {// 這里存放你需要傳遞給處理業務的參數public $params = []; }$event = new SuccessEvent(
? ? ['params' => array()],? ? ? ? ? ? ?// 這里就是你的參數了,可以隨意寫
);
$event是必須要基于Yii\base\Even創建的類
$this->trigger(self::EVENT_NAME, $event = null);
然后就可以了,在你的調用方法中
function callback($event) {
? ? print_r($evnet->params);? ? // 諾,這里就是你的參數,直接使用就可以了,然后寫自己的業務就好了
? ? // TODO
}
?
?
?
總結
以上是生活随笔為你收集整理的Yii2 event tigger 关于事件的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 秘钥学习笔记
- 下一篇: MySQL 怎么保证备份数据的一致性?