Laravel Listener не был запущен, хотя событие было вызвано - PullRequest
0 голосов
/ 17 октября 2018

Я занимаюсь разработкой веб-приложения с использованием фреймворка Laravel.Я пытаюсь использовать событие и слушателя в моем приложении.Но событие сработало, и прослушиватель сработавшего события не сработал.

Это действие моего контроллера

    public function store(Request $request)
    {

        //other code
        $item = Item::create($request->all())
        broadcast(new ItemCreated($item));
        return "Item created successfully";
    }

Это мои события \ ItemCreated.php

class ItemCreated
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $item;

    public function __construct($item)
    {
        $this->item = $item;
    }
}

Затем у меня есть прослушиватель для этого события.

Listeners / EmailSubscribeedUsers.php

class EmailSubscribedUsers
{

    public function __construct()
    {
        //this constructor is not triggered
    }


    public function handle(ItemCreated $event)
    {
        //This method is not fired
    } 
}

В EventServiceProvider я зарегистрировал событие и прослушиватель, как этот

protected $listen = [

    ItemCreated::class => [
        EmailSubscribedUsers::class
    ]
];

Событие сработало.Но слушатель не уволен.Зачем?Что не так?

Я попробовал следующие решения.

php artisan optimize
composer dumpautoload
php artisan clear-compiled

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Извините всех.Проблема была в том, что я проходил модульное тестирование.В модульном тестировании, если я использовал Event :: fake (), слушатели событий не запускаются.Я хотел проверить логику в слушателях событий.Поэтому я удалил Event :: fake () и проверил логику в слушателе.

0 голосов
/ 17 октября 2018

Прежде всего, как указано в комментариях, используйте

event(new ItemCreated($item)); 

, а не

broadcast(new ItemCreated($item));

Кроме того, убедитесь, что вы установили QUEUE_CONNECTION в sync в своем .envфайл.Если вы использовали какое-либо другое соединение (например, database или Redis), убедитесь, что вы запустили консольную команду:

php artisan queue:work

Последнее - проверьте журнал ошибок в каталоге storage/logs.У вас могут быть другие ошибки (например, пропущен импорт), и поэтому ваш слушатель не работает.

Также убедитесь, что в EventServiceProvider вы используете допустимые классы и импортированные действительные пространства имен - иначе слушатель не будет запущен.

...