国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Yii2事件示例解析

tuniutech / 2240人閱讀

摘要:事件可以將自定義代碼注入到現(xiàn)有代碼中的特定執(zhí)行點。在處理復(fù)雜任務(wù)時,事件能很好地起到解耦的作用。

事件可以將自定義代碼“注入”到現(xiàn)有代碼中的特定執(zhí)行點。 附加自定義代碼到某個事件,當這個事件被觸發(fā)時,這些代碼就會自動執(zhí)行。

在處理復(fù)雜任務(wù)時,事件能很好地起到解耦的作用。事件相對于硬編碼的方式來說也增加了服務(wù)器資源開銷,所以比較建議在任務(wù)較為復(fù)雜時使用事件!

以下是實例代碼,代碼中有詳細注釋:

控制器
registerEventHandler();
    }

    /**
     * 事件注冊
     */
    private function registerEventHandler(){
        //事件處理類
        $msgHandler = new MsgHandler();
        //綁定事件時,可以傳入第三個參數(shù)。該參數(shù)值將會保存到Event類的data屬性中
        $this->on(self::BEFORE_SEND,[$msgHandler,"beforeSendMsg"],"who");
        $this->on(self::AFTER_SEND,[$msgHandler,"afterSendMsg"]);
    }

    /**
     * 測試用的方法
     */
    public function actionIndex(){
        //發(fā)送信息前的事件類
        $msgBefore = new MsgBeforeEvent();
        $msgBefore->date = date("Y-m-d H:i:s",time());
        //觸發(fā)發(fā)送信息前的事件,傳入事件類的實例對象,這里的對象充當了保存臨時數(shù)據(jù)的角色
        $this->trigger(self::BEFORE_SEND,$msgBefore);
        //假設(shè)這里是個較為復(fù)雜的任務(wù)
        echo "發(fā)送信息...
";
        //任務(wù)執(zhí)行完畢后,調(diào)用發(fā)送信息后的事件
        $msgAfter = new MsgAfterEvent();
        $msgAfter->from = "Jack";
        $msgAfter->to = "Lucy";
        $msgAfter->message = "Awesome";
        //觸發(fā)發(fā)送信息后的事件
        $this->trigger(self::AFTER_SEND,$msgAfter);
    }
}
事件處理類

個人覺得可以直接放在models目錄下,如果不需要用到數(shù)據(jù)庫操作,可以考慮直接繼承Model

date.",extraMsg:".$event->data."
";
        //寫入文件中
        file_put_contents("log.txt",$logContent,FILE_APPEND);
    }

    /**
     * 處理發(fā)送信息后的事件
     * @param MsgAfterEvent $event
     */
    public function afterSendMsg(MsgAfterEvent $event){
        /**
         * 從event中讀取數(shù)據(jù)
         */
        $logContent = "AFTER!".$event->from."發(fā)送給".$event->to.",內(nèi)容如下:".$event->message."
";
        file_put_contents("log.txt",$logContent,FILE_APPEND);
    }
}

消息發(fā)送前的事件類

可以放到models目錄下


消息發(fā)送后的事件類

可以放到models目錄下


處理結(jié)果

運行控制器中的index方法后,在log.txt文件中得到如下結(jié)果

BEFORE:2017-11-08 14:10:07,extraMsg:who
AFTER!Jack發(fā)送給Lucy,內(nèi)容如下:Awesome

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26044.html

相關(guān)文章

  • 淺析Yii2.0的事件Event

    摘要:全局級別利用實例在整個應(yīng)用的生命周期中全局可訪問的特性,來實現(xiàn)這個全局事件的。類級別通過維護類的屬性數(shù)組,觸發(fā)事件時通過類名和事件名稱取到當前類以及父類的數(shù)據(jù),再通過函數(shù)觸發(fā)。 概念理解:在某一個事件(trigger)發(fā)生的時候,觸發(fā)預(yù)先設(shè)定(on)的代碼,這是代碼解耦的一種方式。 事件按照級別分為三類 1. 實例級別 綁定事件、觸發(fā)事件的類繼承的是Component,只在當前示例中運...

    李義 評論0 收藏0
  • yii2框架中的di容器源碼中了解反射的作用

    摘要:反射簡介參考官方簡介的話,具有完整的反射,添加了對類接口函數(shù)方法和擴展進行反向工程的能力。此外,反射提供了方法來取出函數(shù)類和方法中的文檔注釋。 反射簡介 參考官方簡介的話,PHP 5 具有完整的反射 API,添加了對類、接口、函數(shù)、方法和擴展進行反向工程的能力。 此外,反射 API 提供了方法來取出函數(shù)、類和方法中的文檔注釋。 YII2框架中示例 對于yii2框架,應(yīng)該都知道di容器,...

    dantezhao 評論0 收藏0
  • Yii修行之路 - Extension 擴展

    摘要:運行來安裝指定的擴展。這更便于用戶辨別是否是的擴展。當用戶運行安裝一個擴展時,文件會被自動更新使之包含新擴展的信息。上述代碼表明該擴展依賴于包。例如,上述的條目聲明將對應(yīng)于別名。為達到這個目的,你應(yīng)當在公開發(fā)布前做測試。 簡述 擴展是專門設(shè)計的在 Yii 應(yīng)用中隨時可拿來使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴展在你的應(yīng)用的每個頁面底部添加...

    bovenson 評論0 收藏0
  • Yii2 框架核心概念之組件(手冊翻譯)

    摘要:可以在方法里實現(xiàn)例行檢查和屬性正常化檢查對象方法調(diào)用開始的三個階段都在構(gòu)造函數(shù)里實現(xiàn),這意味著當你得到一個對象的實例時,它已經(jīng)被初始化為適當?shù)臓顟B(tài),可以被放心的使用。 組件 組件是YII框架application(應(yīng)用)的主要組成部分,它是 [yiiaseComponent]的實例或者子類。組件有三個重要特征(功能): 屬性(properties) 事件(events) 行為(...

    nemo 評論0 收藏0
  • 再看Yii2

    摘要:之前有兩篇文章寫了一些關(guān)于的和的,現(xiàn)在來全局性地看一看相對于到底有哪些改善。先說安裝方法,在中已經(jīng)使用來管理各種依賴關(guān)系,你在安裝的時候完全可以用來進行安裝,而且,還支持兩個不同的安裝版和。 之前有兩篇文章寫了一些關(guān)于Yii 2.0的MVC和Yii 2.0的Actived Record,現(xiàn)在來全局性地看一看Yii 2.0相對于Yii 1.1到底有哪些改善。個人總結(jié)有一下幾個: 1.Y...

    waruqi 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<