基本用法

2018-02-24 15:52 更新

Laravel 的 event 功能提供一個(gè)簡(jiǎn)單的觀察者實(shí)現(xiàn),允許你在應(yīng)用程序里訂閱與監(jiān)聽(tīng)事件。事件類通常被保存在 app/Events 目錄下,而它們的處理程序則被保存在 app/Handlers/Events 目錄下。

你可以使用 Artisan 命令行工具產(chǎn)生一個(gè)新的事件類:

php artisan make:event PodcastWasPurchased

訂閱事件

Laravel 里的 EventServiceProvider 提供了一個(gè)方便的地方注冊(cè)所有的事件處理程序。listen 屬性包含一個(gè)所有的事件 (鍵) 和相對(duì)應(yīng)的處理程序 (值) 的 數(shù)組。當(dāng)然,你可以依應(yīng)用程序的需求添加任何數(shù)量的事件到這個(gè)數(shù)組。舉個(gè)例子,讓我們來(lái)加上 PodcastWasPurchased 事件:

/**
 * 應(yīng)用程序的事件處理程序?qū)φ铡? *
 * @var array
 */
protected $listen = [
    'App\Events\PodcastWasPurchased' => [
        'App\Handlers\Events\EmailPurchaseConfirmation',
    ],
];

使用 Artisan 命令行命令 handler:event,來(lái)產(chǎn)生一個(gè)事件的處理程序:

php artisan handler:event EmailPurchaseConfirmation --event=PodcastWasPurchased

當(dāng)然,在每次你需要一個(gè)處理程序或是事件時(shí),手動(dòng)地執(zhí)行 make:event 和 handler:event 命令很麻煩。作為替代,簡(jiǎn)單地添加處理程序跟事件到你的 EventServiceProvider 并使用 event:generate 命令。這個(gè)命令將會(huì)產(chǎn)生任何在你的 EventServiceProvider 列出的事件跟處理程序:

php artisan event:generate

觸發(fā)事件

現(xiàn)在我們準(zhǔn)備好使用 Event facade 觸發(fā)我們的事件:

$response = Event::fire(new PodcastWasPurchased($podcast));

fire 方法返回一個(gè)響應(yīng)的數(shù)組,讓你可以用來(lái)控制你的應(yīng)用程序接下來(lái)要有什么反應(yīng)。

你也可以使用 event 輔助方法來(lái)觸發(fā)事件:

event(new PodcastWasPurchased($podcast));

監(jiān)聽(tīng)器閉包

你甚至可以不需對(duì)事件建立對(duì)應(yīng)的處理類。舉個(gè)例子,在你的 EventServiceProvider 的 boot 方法里,你可以做下面這件事:

Event::listen('App\Events\PodcastWasPurchased', function($event)
{
    // 處理事件...
});

停止繼續(xù)傳遞事件

有時(shí)候你會(huì)希望停止繼續(xù)傳遞事件到其他監(jiān)聽(tīng)器。你可以通過(guò)從處理程序返回 false 來(lái)做到這件事:

Event::listen('App\Events\PodcastWasPurchased', function($event)
{
    // 處理事件...

    return false;
});
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)