Laravel Listener не был запущен, хотя событие было вызвано

Я занимаюсь разработкой веб-приложения с использованием фреймворка 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;
}
}

Тогда у меня есть слушатель для этого события.

Слушатели / EmailSubscribedUsers.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

0

Решение

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

event(new ItemCreated($item));

и не

broadcast(new ItemCreated($item));

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

php artisan queue:work

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

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

1

Другие решения

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

1

По вопросам рекламы [email protected]