Laravel 即使事件被触发,监听器也没有被触发
Laravel Listener not fired even though the event was triggered
我正在使用 Laravel 框架开发 Web 应用程序。我正在尝试在我的应用程序中使用事件和侦听器。但是事件被触发了,触发事件的侦听器没有被触发。
这是我的控制器操作
public function store(Request $request)
{
//other code
$item = Item::create($request->all())
broadcast(new ItemCreated($item));
return "Item created successfully";
}
这是我的Events\ItemCreated.php
class ItemCreated
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $item;
public function __construct($item)
{
$this->item = $item;
}
}
那么我就有了那个事件的监听器。
Listeners/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));
此外,请确保您已在 .env
文件中将 QUEUE_CONNECTION
设置为 sync
。如果您使用其他连接(例如 database
或 Redis
),请确保您在控制台命令中 运行:
php artisan queue:work
最后一件事 - 在 storage/logs
目录中验证您的错误日志。您可能有一些其他错误(例如缺少导入),这就是您的侦听器失败的原因。
还要确保在 EventServiceProvider
中使用有效的 类 和导入的有效命名空间 - 否则不会触发侦听器。
对不起大家。问题是我在进行单元测试。在单元测试中,如果我使用 Event::fake(),则不会触发事件侦听器。我想测试事件监听器中的逻辑。因此,我删除了 Event::fake() 并改为在侦听器中测试逻辑。
我正在使用 Laravel 框架开发 Web 应用程序。我正在尝试在我的应用程序中使用事件和侦听器。但是事件被触发了,触发事件的侦听器没有被触发。
这是我的控制器操作
public function store(Request $request)
{
//other code
$item = Item::create($request->all())
broadcast(new ItemCreated($item));
return "Item created successfully";
}
这是我的Events\ItemCreated.php
class ItemCreated
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $item;
public function __construct($item)
{
$this->item = $item;
}
}
那么我就有了那个事件的监听器。
Listeners/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));
此外,请确保您已在 .env
文件中将 QUEUE_CONNECTION
设置为 sync
。如果您使用其他连接(例如 database
或 Redis
),请确保您在控制台命令中 运行:
php artisan queue:work
最后一件事 - 在 storage/logs
目录中验证您的错误日志。您可能有一些其他错误(例如缺少导入),这就是您的侦听器失败的原因。
还要确保在 EventServiceProvider
中使用有效的 类 和导入的有效命名空间 - 否则不会触发侦听器。
对不起大家。问题是我在进行单元测试。在单元测试中,如果我使用 Event::fake(),则不会触发事件侦听器。我想测试事件监听器中的逻辑。因此,我删除了 Event::fake() 并改为在侦听器中测试逻辑。