У меня есть пакет Laravel, который запускает событие, которое находится в папке поставщика.
Класс события, который запускается Mikea\Kicker\Events\Interviews\SurveyWasCompleted
Мне нужно прослушать это событие, а затем умереть и сбросить объект события.
Я добавил следующий код в мой файл rout.php
Event::listen('Mikea\Kicker\Events\Interviews\SurveyWasCompleted', function($event){
dd($event);
});
Однако на экране ничего не отображается. Я точно знаю, что SurveyWasCompleted
событие вызывается, потому что когда я умираю и сбрасываю изнутри события, я получаю данные.
Как я могу правильно слушать событие, которое будет запущено?
Вам необходимо зарегистрировать событие в 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));
Возможно, вам придется зарегистрировать его в EventServiceProvider, а не в файле rout.php.
https://laravel.com/docs/5.2/events#registering-events-and-listeners
Также, если это модельное событие (например, saving
или же saved
), вы можете вставить его прямо в самой модели.
public function boot()
{
User::creating(function ($user) {
if ( ! $user->isValid()) {
return false;
}
});
}