類別:後端相關
| 發布於 2025-06-21 17:08
Laravel
事件(Events)和監聽器(Listeners)
說明
事件(Events)和監聽器(Listeners)是用於實現應用程式內部事件驅動的重要概念。
使用事件驅動架構具有以下幾個優勢:
- 解耦性:可將應用程式不同部分解耦,便於維護與擴展。
- 可讀性:將事件處理邏輯封裝於監聽器中,使業務邏輯更清晰。
- 重複使用:相同事件與監聽器可於多處使用,減少重複程式碼。
- 監視與記錄:便於加入監控與日誌功能,無需修改核心邏輯。
- 可測試性:可透過模擬事件與監聽器,便於單元測試。
設計流程
1. 建立事件
事件類別通常存放於 app/Events 目錄。
2. 編輯事件
定義事件的屬性與建構函式:
3. 建立監聽器
監聽器類別通常存放於 app/Listeners 目錄。
4. 編輯監聽器
定義事件的處理邏輯:
5. 註冊事件與監聽器
於 app/Providers/EventServiceProvider.php 註冊:
6. 觸發事件
在應用程式中某處觸發事件:
Laravel 事件(Events)和監聽器(Listeners)
說明
使用事件驅動架構具有以下幾個優勢:
設計流程
1. 建立事件
事件類別通常存放於
app/Events目錄。2. 編輯事件
定義事件的屬性與建構函式:
namespace App\Events; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class EventName { use Dispatchable, InteractsWithSockets, SerializesModels; public $data; public function __construct($data) { $this->data = $data; } }3. 建立監聽器
監聽器類別通常存放於
app/Listeners目錄。4. 編輯監聽器
定義事件的處理邏輯:
namespace App\Listeners; use App\Events\EventName; class ListenerName { public function handle(EventName $event) { // 處理事件邏輯,存取 $event->data } }5. 註冊事件與監聽器
於
app/Providers/EventServiceProvider.php註冊:protected $listen = [ EventName::class => [ ListenerName::class, ], ];6. 觸發事件
在應用程式中某處觸發事件:
event(new EventName($data));