來學一學laravel中事件和觀察者

1 事件與監聽器
事件是一個比較廣泛的的名詞,他可以代表所做的一個動作。和事件一起出現的就是監聽器了,其作用是用來監聽你所做的事情,用來對你的行爲做後續處理。

事件系統爲應用各個方面的解耦提供了非常棒的方法,因爲單個事件可以擁有多個互不依賴的監聽器。例如,你可能希望每次訂單發貨時向用戶發送一個通知。你可以編寫一個可以被監聽的事件,而不是將訂單處理代碼通知代碼耦合在一起。

事件:
Laravel 框架想要創建事件可以通過以下命令來創建:

php artisan make:event 事件名稱
該文件會存放在 app/Events 目錄下面。

監聽器:
創建監聽器可以使用以下命令來創建:

php artisan make:listener 監聽器名稱
註冊:
事件和監聽器在創建完畢後,還需要將二者聯合起來。我們可以在 EventServiceProvider 服務提供者中進行註冊。如下:

protected $listen = [
        事件名稱 => [
            監聽器名稱,
         .
        ],
    ];

分發

event(new TestEvent());
2 模型事件
模型事件是專門針對模型而額外添加的功能。其給我們創建了對應的事件與監聽。在使用模型事件事,我們需要遵守模型給我們的規則:

retrieved: 獲取到模型實例後觸發
creating: 插入到數據庫前觸發
created: 插入到數據庫後觸發
updating: 更新到數據庫前觸發
updated: 更新到數據庫後觸發
saving: 保存到數據庫前觸發(插入/更新之前,無論插入還是更新都會觸發)
saved: 保存到數據庫後觸發(插入/更新之後,無論插入還是更新都會觸發)
deleting: 從數據庫刪除記錄前觸發
deleted: 從數據庫刪除記錄後觸發
restoring: 恢復軟刪除記錄前觸發
restored: 恢復軟刪除記錄後觸發

需要在模型處綁定

protected $dispatchesEvents = [
        'saving' => \App\Events\TestEvent::class,
//      'updated' => \App\Events\TestEvent::class,
];

3 觀察者
事件需要與監聽器關聯來,當監聽器變多了我們還需進行註冊實現,這樣會比較麻煩,這時我們可以考慮使用觀察者。如果在一個模型上監聽了多個事件,可以使用觀察者來將這些監聽器組織到一個單獨的類中。

觀察者使用:
觀察者的創建可以使用以下命令來創建:

php artisan make:observer
如果想要直接跟模型關聯起來,還可以直接加入參數與模型關聯:

php artisan make:observer UserObserver --model=User
觀察者註冊:
在服務提供者中註冊

User::observe(UserObserver::class);
或在模型中註冊

public static function booted()
{
     self::observe(UserObserver::class);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章