基本用法

2018-02-24 15:52 更新

Laravel 的 event 功能提供一个简单的观察者实现,允许你在应用程序里订阅与监听事件。事件类通常被保存在 app/Events 目录下,而它们的处理程序则被保存在 app/Handlers/Events 目录下。

你可以使用 Artisan 命令行工具产生一个新的事件类:

php artisan make:event PodcastWasPurchased

订阅事件

Laravel 里的 EventServiceProvider 提供了一个方便的地方注册所有的事件处理程序。listen 属性包含一个所有的事件 (键) 和相对应的处理程序 (值) 的 数组。当然,你可以依应用程序的需求添加任何数量的事件到这个数组。举个例子,让我们来加上 PodcastWasPurchased 事件:

/**
 * 应用程序的事件处理程序对照。
 *
 * @var array
 */
protected $listen = [
    'App\Events\PodcastWasPurchased' => [
        'App\Handlers\Events\EmailPurchaseConfirmation',
    ],
];

使用 Artisan 命令行命令 handler:event,来产生一个事件的处理程序:

php artisan handler:event EmailPurchaseConfirmation --event=PodcastWasPurchased

当然,在每次你需要一个处理程序或是事件时,手动地执行 make:event 和 handler:event 命令很麻烦。作为替代,简单地添加处理程序跟事件到你的 EventServiceProvider 并使用 event:generate 命令。这个命令将会产生任何在你的 EventServiceProvider 列出的事件跟处理程序:

php artisan event:generate

触发事件

现在我们准备好使用 Event facade 触发我们的事件:

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

fire 方法返回一个响应的数组,让你可以用来控制你的应用程序接下来要有什么反应。

你也可以使用 event 辅助方法来触发事件:

event(new PodcastWasPurchased($podcast));

监听器闭包

你甚至可以不需对事件建立对应的处理类。举个例子,在你的 EventServiceProvider 的 boot 方法里,你可以做下面这件事:

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

停止继续传递事件

有时候你会希望停止继续传递事件到其他监听器。你可以通过从处理程序返回 false 来做到这件事:

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

    return false;
});
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号