摘要:事件可以將自定義代碼注入到現有代碼中的特定執行點。在處理復雜任務時,事件能很好地起到解耦的作用。
事件可以將自定義代碼“注入”到現有代碼中的特定執行點。 附加自定義代碼到某個事件,當這個事件被觸發時,這些代碼就會自動執行。
在處理復雜任務時,事件能很好地起到解耦的作用。事件相對于硬編碼的方式來說也增加了服務器資源開銷,所以比較建議在任務較為復雜時使用事件!
以下是實例代碼,代碼中有詳細注釋:
控制器registerEventHandler(); } /** * 事件注冊 */ private function registerEventHandler(){ //事件處理類 $msgHandler = new MsgHandler(); //綁定事件時,可以傳入第三個參數。該參數值將會保存到Event類的data屬性中 $this->on(self::BEFORE_SEND,[$msgHandler,"beforeSendMsg"],"who"); $this->on(self::AFTER_SEND,[$msgHandler,"afterSendMsg"]); } /** * 測試用的方法 */ public function actionIndex(){ //發送信息前的事件類 $msgBefore = new MsgBeforeEvent(); $msgBefore->date = date("Y-m-d H:i:s",time()); //觸發發送信息前的事件,傳入事件類的實例對象,這里的對象充當了保存臨時數據的角色 $this->trigger(self::BEFORE_SEND,$msgBefore); //假設這里是個較為復雜的任務 echo "發送信息... "; //任務執行完畢后,調用發送信息后的事件 $msgAfter = new MsgAfterEvent(); $msgAfter->from = "Jack"; $msgAfter->to = "Lucy"; $msgAfter->message = "Awesome"; //觸發發送信息后的事件 $this->trigger(self::AFTER_SEND,$msgAfter); } }事件處理類
個人覺得可以直接放在models目錄下,如果不需要用到數據庫操作,可以考慮直接繼承Model
date.",extraMsg:".$event->data." "; //寫入文件中 file_put_contents("log.txt",$logContent,FILE_APPEND); } /** * 處理發送信息后的事件 * @param MsgAfterEvent $event */ public function afterSendMsg(MsgAfterEvent $event){ /** * 從event中讀取數據 */ $logContent = "AFTER!".$event->from."發送給".$event->to.",內容如下:".$event->message." "; file_put_contents("log.txt",$logContent,FILE_APPEND); } }消息發送前的事件類
可以放到models目錄下
消息發送后的事件類可以放到models目錄下
處理結果運行控制器中的index方法后,在log.txt文件中得到如下結果
BEFORE:2017-11-08 14:10:07,extraMsg:who AFTER!Jack發送給Lucy,內容如下:Awesome
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26044.html
摘要:全局級別利用實例在整個應用的生命周期中全局可訪問的特性,來實現這個全局事件的。類級別通過維護類的屬性數組,觸發事件時通過類名和事件名稱取到當前類以及父類的數據,再通過函數觸發。 概念理解:在某一個事件(trigger)發生的時候,觸發預先設定(on)的代碼,這是代碼解耦的一種方式。 事件按照級別分為三類 1. 實例級別 綁定事件、觸發事件的類繼承的是Component,只在當前示例中運...
摘要:反射簡介參考官方簡介的話,具有完整的反射,添加了對類接口函數方法和擴展進行反向工程的能力。此外,反射提供了方法來取出函數類和方法中的文檔注釋。 反射簡介 參考官方簡介的話,PHP 5 具有完整的反射 API,添加了對類、接口、函數、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數、類和方法中的文檔注釋。 YII2框架中示例 對于yii2框架,應該都知道di容器,...
摘要:運行來安裝指定的擴展。這更便于用戶辨別是否是的擴展。當用戶運行安裝一個擴展時,文件會被自動更新使之包含新擴展的信息。上述代碼表明該擴展依賴于包。例如,上述的條目聲明將對應于別名。為達到這個目的,你應當在公開發布前做測試。 簡述 擴展是專門設計的在 Yii 應用中隨時可拿來使用的, 并可重發布的軟件包。 基礎 例如, yiisoft/yii2-debug 擴展在你的應用的每個頁面底部添加...
摘要:可以在方法里實現例行檢查和屬性正?;瘷z查對象方法調用開始的三個階段都在構造函數里實現,這意味著當你得到一個對象的實例時,它已經被初始化為適當的狀態,可以被放心的使用。 組件 組件是YII框架application(應用)的主要組成部分,它是 [yiiaseComponent]的實例或者子類。組件有三個重要特征(功能): 屬性(properties) 事件(events) 行為(...
閱讀 2832·2021-11-25 09:43
閱讀 983·2021-10-11 10:57
閱讀 2487·2020-12-03 17:20
閱讀 3732·2019-08-30 14:05
閱讀 2429·2019-08-29 14:00
閱讀 1997·2019-08-29 12:37
閱讀 1670·2019-08-26 11:34
閱讀 3213·2019-08-26 10:27