php - 即使事件被触发,Laravel Listener 也没有被触发

标签 php laravel laravel-5 laravel-5.7 laravel-events

我正在使用 Laravel 框架开发 Web 应用程序。我正在尝试在我的应用程序中使用事件和监听器。但是事件被触发了,触发事件的监听器没有被触发。

这是我的 Controller 操作

    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::fake(),则不会触发事件监听器。我想测试事件监听器中的逻辑。因此,我删除了 Event::fake() 并改为在监听器中测试逻辑。

关于php - 即使事件被触发,Laravel Listener 也没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52859968/

相关文章:

php - 如何使 "<f:form.select>"成为必填字段(必填)?

php - Android PHP 网络服务安全

php - Elasticsearch 不确定我是否需要使用 bool 查询

php - 左连接在我准备好的语句中不起作用(mysqli)

php - MySQL 从一个表中选择并检查另一个表是否存在相同的值

php - 多封抄送电子邮件表示电子邮件不符合 RFC 2822, 3.6.2

validation - Laravel 5 FormRequest 数组输入的自定义消息

php - Laravel 社交名流 : InvalidStateException

php - Laravel 5 多个公共(public)文件夹 Assets 功能

php - Laravel 5.4 PHP 要求(5.6.30 与 5.6.40)