
- Laravel 教程
- Laravel - 首頁
- Laravel - 概述
- Laravel - 安裝
- Laravel - 應用結構
- Laravel - 配置
- Laravel - 路由
- Laravel - 中介軟體
- Laravel - 名稱空間
- Laravel - 控制器
- Laravel - 請求
- Laravel - Cookie
- Laravel - 響應
- Laravel - 檢視
- Laravel - Blade 模板
- Laravel - 重定向
- Laravel - 資料庫操作
- Laravel - 錯誤與日誌
- Laravel - 表單
- Laravel - 國際化
- Laravel - 會話
- Laravel - 驗證
- Laravel - 檔案上傳
- Laravel - 傳送郵件
- Laravel - Ajax
- Laravel - 錯誤處理
- Laravel - 事件處理
- Laravel - Facades
- Laravel - Contracts
- Laravel - CSRF 保護
- Laravel - 認證
- Laravel - 授權
- Laravel - Artisan 控制檯
- Laravel - 加密
- Laravel - 雜湊
- 理解發布流程
- Laravel - 遊客使用者許可權
- Laravel - Artisan 命令
- Laravel - 分頁自定義
- Laravel - Dump Server
- Laravel - Action URL
- Laravel 有用資源
- Laravel - 快速指南
- Laravel - 有用資源
- Laravel - 討論
Laravel - 事件處理
事件提供了一個簡單的觀察者實現,允許使用者訂閱和監聽 Web 應用中觸發的各種事件。所有 Laravel 中的事件類都儲存在 **app/Events** 資料夾中,監聽器儲存在 **app/Listeners** 資料夾中。
在 Web 應用中生成事件和監聽器的 Artisan 命令如下所示:
php artisan event:generate
此命令將事件和監聽器生成到上面討論的相應資料夾中。

事件和監聽器提供了一種很好的方式來解耦 Web 應用,因為一個事件可以有多個監聽器,而這些監聽器彼此獨立。Artisan 命令建立的事件資料夾包含以下兩個檔案:event.php 和 SomeEvent.php。它們顯示如下:
Event.php
<?php namespace App\Events; abstract class Event{ // }
如上所述,**event.php** 包含類 **Event** 的基本定義,並呼叫名稱空間 **App\Events**。請注意,使用者定義的或自定義事件是在此檔案中建立的。
SomeEvent.php
<?php namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; class SomeEvent extends Event{ use SerializesModels; /** * Create a new event instance. * * @return void */ public function __construct() { // } /** * Get the channels the event should be broadcast on. * * @return array */ public function broadcastOn() { return []; } }
觀察到此檔案使用序列化來廣播 Web 應用中的事件,並且在此檔案中也初始化了必要的引數。
例如,如果我們需要在建構函式中初始化 order 變數以註冊事件,我們可以按以下方式進行:
public function __construct(Order $order) { $this->order = $order; }
監聽器
監聽器處理正在註冊的事件中提到的所有活動。Artisan 命令 **event:generate** 在 **app/listeners** 目錄中建立所有 **監聽器**。Listeners 資料夾包含一個檔案 **EventListener.php**,其中包含處理監聽器所需的所有方法。
EventListener.php
<?php namespace App\Listeners; use App\Events\SomeEvent; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; class EventListener{ /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param SomeEvent $event * @return void */ public function handle(SomeEvent $event) { // } }
如程式碼中所述,它包含用於管理各種事件的 **handle** 函式。我們可以建立各種獨立的監聽器來針對單個事件。
廣告