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