Laravel 事件和監聽器
Laravel 事件和監聽器
Laravel
的事件提供了一個簡單的觀察者模式,允許訂閱和監聽應用程序中發生的各種事件。事件類通常存儲在app/Events
目錄中,而它們的監聽器存儲在app/Listeners
,可以利用php artisan make
來創建相關檔案。
事件在應用程式解藕相當好用,例如:如果希望在商家創建時通知使用者,無須將商家創建的代碼與通知使用者代碼放在一起,可以引發一個App\Events\StoreCreated
事件,監聽器可以接收並使用該事件來分派通知。
創建事件和監聽器
首先先創建StoreCreated
事件和NotifyStoreCreated
監聽器,使用以下 artisan 指令來創建。
php artisan make:event StoreCreated |
上面的指令將分別在 app/Events
和 app/Listeners
文件夾中創建事件和監聽器。
註冊事件和監聽器
在app/Providers/EventServiceProvider.php
文件中註冊您的事件和偵聽器。
protected $listen
屬性包含所有事件及其偵聽器作為鍵值對的數組。接下來,我們將事件StoreCreated
和偵聽器添加NotifyStoreCreated
到數組$listen
中,如下所示。
use App/Events/StoreCreated; |
可以使用此指令php artisan event:list
查看應用程序註冊的所有事件和偵聽器的列表
定義事件和監聽器
編輯StoreCreated.php
,我們要在每次商家創建時發送通知,我們需要將$store
的實例傳給StoreCreated
,讓監聽器可以訪問$store
的實例
# app/Events/StoreCreated.php |
再來編輯NotifyStoreCreated.php
,NotifyStoreCreated
監聽器類別將用來發送通知給用戶,可以看到有一個handle
函式,是事件將調用的方法,在這個handle
方法中,我們將編寫必要的代碼來發送通知。
# app/Listeners/NotifyPostCreated.php |
調度事件
最後一步就是觸發StoreCreated
事件,使用event()
這個helper
函式,這個函式會把事件分派給有註冊的監聽器(listeners)
# app/Http/Controllers/StoreController.php |
如果事件使用Illuminate\Foundation\Events\Dispatchabletrait
,可以像這樣調用事件的靜態dispatch
方法。
public function store(Request $request) |
之後在商家新增時StoreCreated
都會引發事件並最終執行偵聽NotifyStoreCreated
監聽器以通知用戶。