如何监听 Laravel 5.2 中的事件?

How to listen for an event in Laravel 5.2?

我有一个 Laravel 包,它触发位于 vendor 文件夹中的事件。

正在触发的事件 class 是 Mikea\Kicker\Events\Interviews\SurveyWasCompleted

我需要监听该事件,然后结束并转储该事件的对象。

我在 routes.php 文件中添加了以下代码

Event::listen('Mikea\Kicker\Events\Interviews\SurveyWasCompleted', function($event){
    dd($event);
});

但是,屏幕上没有显示任何内容。我确定调用了 SurveyWasCompleted 事件,因为当我死去并从事件内部转储时,我得到了数据。

如何正确监听要触发的事件?

您可能需要在 EventServiceProvider 而不是 routes.php 文件中注册它。

https://laravel.com/docs/5.2/events#registering-events-and-listeners

您需要在 EventServiceProvider 中注册事件

protected $listen = [
        'Mikea\Kicker\Events\Interviews\SurveyWasCompleted' => [
            'Mikea\Kicker\Listeners\SurveyWasCompletedListener',
        ]
    ];

然后你需要创建一个监听器SurveyWasCompletedListener

namespace Mikea\Kicker\Listeners;

use Mikea\Kicker\Events\Interviews\SurveyWasCompleted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class SurveyWasCompletedListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  SurveyWasCompleted $event
     * @return void
     */
    public function handle(SurveyWasCompleted $event)
    {
        //do something
    }
} 

显然您需要使用

触发事件
Event::fire(new SurveyWasCompleted($data));