日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Yii2 event tigger 关于事件的简单使用

發(fā)布時(shí)間:2023/12/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yii2 event tigger 关于事件的简单使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先需要明白事件是什么?在什么情況下使用?使用它帶來了什么好處?

基于官方?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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。