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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2023/12/14 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 关于事件的简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。