1. 程式人生 > 實用技巧 >Laravel入坑指南(10)——事件Event

Laravel入坑指南(10)——事件Event

不知不覺,我們已經來到了第10小節。這一小節,我們一起討論關於“事件”這個話題。眾所周知,從二進位制到彙編,再到高等級語言,這一路發展下來,程式碼都是順序執行的,那麼事件是什麼?這個事件上本沒有事件,糾結的人多了也就有了事件。

如果你也是程式設計界的泥石流,你就會發現事件發源於訊息(或者訊號),當代碼執行到某個特殊時刻想要做一件事情,我們就呼叫一個函式來處理,而這個函式就是我們說的“事件”。

跟據上面的討論,大家會發現,事件的普遍概念即是“函式呼叫”。所以它的好處不言而喻,那就是程式碼語義化以及降低程式碼的耦合度。當某個事情不處理了,我們取消事件函式的呼叫就行,就不需重新對主要的業務流程進行覆蓋測試。

Laravel框架的事件機制的實現,也是這種思維。一個事件(類)匹配一個偵聽器(類),由對應的偵聽器處理對應的事件。下面就讓我們一起了解Laravel中事件如何使用:

1、建立事件

在建立事件之前,我們需要在/app/Providers/EventServiceProvider.php中的$listen一節中進行配置。如下圖:

上圖的配置說明 ,有個MyEvent事件類,一旦這個事件類被觸發,則由MyListener這個偵聽器類進行處理。

接下來,在專案的根目錄中執行以下命令,自動生成MyEvent和MyListener兩個類:

php artisan event:generate

生成後的結果,如下所示:

2、事件分佈與響應

1) 事件的分發

event(new MyEvent());    //根據真實的MyEvent建構函式進行例項化

2) 事件的響應

因為MyEvent對應的偵聽器是MyListener,所以事件的響應即是MyEvent類中的handler函式:

class MyListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  MyEvent  $event
     * @return void
     
*/ public function handle(MyEvent $event) { //在這裡進行處理 } }

寫在後面:在這一篇事件討論話題中,所有的事件分發和響應都是同步執行的,雖然實現的位置不一樣,但是一樣的流水線執行。如果碰到像類似於發郵件這種耗時的操作,我們就需要採用非同步執行,這時就需要列隊。Laravel提供了列隊的機制與配置,下一期我們討論完成列隊之後,我們會花點時間討論一下列隊非同步事件的實現。

這一篇就先到這裡了,大家下期見:)

--------------------------- 我是可愛的分割線 ----------------------------

最後博主借地宣傳一下,漳州程式設計小組招新了,這是一個面向漳州青少年資訊學/軟體設計的學習小組,有意向的同學點選連結,聯絡我吧。