2

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

被触发的事件类是Mikea\Kicker\Events\Interviews\SurveyWasCompleted

我需要监听那个事件,然后死掉并转储事件的对象。

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

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

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

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

4

2 回答 2

3

您需要在 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));
于 2016-01-13T01:06:44.770 回答
0

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

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

于 2016-01-13T00:08:48.303 回答