下面由laravel教程欄目給大家介紹laravel中的事件以及觀察者,希望對需要的朋友有所幫助!
一:事件與監(jiān)聽器
事件是一個比較廣泛的的名詞,他可以代表所做的一個動作。和事件一起出現(xiàn)的就是監(jiān)聽器了,其作用是用來監(jiān)聽你所做的事情,用來對你的行為做后續(xù)處理。
事件系統(tǒng)為應(yīng)用各個方面的解耦提供了非常棒的方法,因?yàn)閱蝹€事件可以擁有多個互不依賴的監(jiān)聽器。例如,你可能希望每次訂單發(fā)貨時向用戶發(fā)送一個通知。你可以編寫一個可以被監(jiān)聽的事件,而不是將訂單處理代碼通知代碼耦合在一起。
事件:
Laravel 框架想要創(chuàng)建事件可以通過以下命令來創(chuàng)建:
php artisan make:event 事件名稱
該文件會存放在 app/Events 目錄下面。
監(jiān)聽器:
創(chuàng)建監(jiān)聽器可以使用以下命令來創(chuàng)建:
php artisan make:listener 監(jiān)聽器名稱
注冊:
事件和監(jiān)聽器在創(chuàng)建完畢后,還需要將二者聯(lián)合起來。我們可以在 EventServiceProvider 服務(wù)提供者中進(jìn)行注冊。如下:
protected $listen = [ 事件名稱 => [ 監(jiān)聽器名稱, . ], ];
分發(fā)
event(new TestEvent());
二:模型事件
模型事件是專門針對模型而額外添加的功能。其給我們創(chuàng)建了對應(yīng)的事件與監(jiān)聽。在使用模型事件事,我們需要遵守模型給我們的規(guī)則:
- retrieved: 獲取到模型實(shí)例后觸發(fā)
- creating: 插入到數(shù)據(jù)庫前觸發(fā)
- created: 插入到數(shù)據(jù)庫后觸發(fā)
- updating: 更新到數(shù)據(jù)庫前觸發(fā)
- updated: 更新到數(shù)據(jù)庫后觸發(fā)
- saving: 保存到數(shù)據(jù)庫前觸發(fā)(插入/更新之前,無論插入還是更新都會觸發(fā))
- saved: 保存到數(shù)據(jù)庫后觸發(fā)(插入/更新之后,無論插入還是更新都會觸發(fā))
- deleting: 從數(shù)據(jù)庫刪除記錄前觸發(fā)
- deleted: 從數(shù)據(jù)庫刪除記錄后觸發(fā)
- restoring: 恢復(fù)軟刪除記錄前觸發(fā)
- restored: 恢復(fù)軟刪除記錄后觸發(fā)
需要在模型處綁定
protected $dispatchesEvents = [ 'saving' => AppEventsTestEvent::class, // 'updated' => AppEventsTestEvent::class, ];
三:觀察者
事件需要與監(jiān)聽器關(guān)聯(lián)來,當(dāng)監(jiān)聽器變多了我們還需進(jìn)行注冊實(shí)現(xiàn),這樣會比較麻煩,這時我們可以考慮使用觀察者。如果在一個模型上監(jiān)聽了多個事件,可以使用觀察者來將這些監(jiān)聽器組織到一個單獨(dú)的類中。
觀察者使用:
觀察者的創(chuàng)建可以使用以下命令來創(chuàng)建:
php artisan make:observer
如果想要直接跟模型關(guān)聯(lián)起來,還可以直接加入?yún)?shù)與模型關(guān)聯(lián):
php artisan make:observer UserObserver --model=User
觀察者注冊:
在服務(wù)提供者中注冊
User::observe(UserObserver::class);
或在模型中注冊
public static function booted() { self::observe(UserObserver::class); }