Я занимаюсь разработкой веб-приложения с использованием фреймворка 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
Прежде всего, как указано в комментариях использования
event(new ItemCreated($item));
и не
broadcast(new ItemCreated($item));
Кроме того, убедитесь, что вы установили QUEUE_CONNECTION
в sync
в вашем .env
файл. Если вы использовали какое-то другое соединение (например, database
или же Redis
) убедитесь, что вы запускаете консольную команду:
php artisan queue:work
Последнее, что нужно — подтвердить свою ошибку в логине storage/logs
каталог. У вас могут быть некоторые другие ошибки (например, пропущен импорт), и именно поэтому ваш слушатель терпит неудачу.
Также убедитесь, что в EventServiceProvider
что вы используете допустимые классы и импортированные действительные пространства имен — иначе слушатель не будет запущен.
Извините всех. Проблема была в том, что я проходил модульное тестирование. В модульном тестировании, если я использовал Event :: fake (), прослушиватели событий не запускаются. Я хотел проверить логику в слушателях событий. Поэтому я удалил Event :: fake () и протестировал логику в слушателе.