events - Laravel 监听器监听多个事件

标签 events laravel laravel-5

所以根据laravel事件doc , 在定义监听器时,它可以在其 handle 方法中接收事件实例并执行任何必要的逻辑:

public function handle(FoodWasPurchased $event)

所以如果我的 FoodWasPurched 事件定义如下(假设设置了 EventServiceProvider):
public function __construct(Food $food)
{
    $this->food = $food;
}

我可以通过执行以下操作从监听器访问事件中的 $food:
$event->food->doSomething();

但现在我的问题是,如果一个听众监听多个事件呢?
Event FoodWasPurchased -> Listener Bill
Event DrinksWasPurchased -> Listener Bill

我现在所做的是我没有在监听器句柄方法中指定事件实例:
public function handle($event)

稍后我可以使用 if 条件来检查 $event 中收到的内容:
if (isset($event->food)) {

    // Do something...

} elseif (isset($event->drinks)) {

    // Do something else...

}

我相信有更好的方法。

或者最好的做法是确保一个听众只听一个事件?

最佳答案

您可以使用 Event Subscribers 监听多个事件它们位于 Listeners 文件夹中,但能够监听多个事件。

<?php

namespace App\Listeners;

class UserEventListener{
    /**
     * Handle user login events.
     */
    public function onUserLogin($event) {}

    /**
     * Handle user logout events.
     */
    public function onUserLogout($event) {}

    /**
     * Register the listeners for the subscriber.
     *
     * @param  Illuminate\Events\Dispatcher  $events
     * @return array
     */
    public function subscribe($events){
        $events->listen(
            'App\Events\UserLoggedIn',
            'App\Listeners\UserEventListener@onUserLogin'
        );

        $events->listen(
            'App\Events\UserLoggedOut',
            'App\Listeners\UserEventListener@onUserLogout'
        );
    }

}

关于events - Laravel 监听器监听多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31345686/

相关文章:

postgresql - 如何比较 laravel 和 postgres 中的两个字段

laravel - laravel如何给用户授权

php - 如何处理队列中的所有项目并退出

php - Laravel 重定向到路由

php - Laravel 网站上的分页重定向到主页

javascript - jQuery - 添加/替换事件监听器(当事件处理程序未知时)

exception - Laravel 4 无法捕获异常

事件触发的 Javascript 函数 - 获取目标?

c# - 转发/中继 .NET 事件

javascript - 以编程方式调用 onclick 属性并与事件参数对话