如何在Laravel 5.2中收听活动?

时间:2016-01-12 23:49:49

标签: php laravel laravel-5 laravel-5.1 laravel-events

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

正在被解雇的事件的类是Mikea\Kicker\Events\Interviews\SurveyWasCompleted

我需要听取该事件,然后死掉并转储该事件的对象。

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

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

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

我如何才能正确地听取要解雇的事件?

3 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

此外,如果是模型事件(如savingsaved),您可以将其直接放在模型中。

public function boot()
{
    User::creating(function ($user) {
        if ( ! $user->isValid()) {
            return false;
        }
    });
}