Laravel 5.5用户事件侦听器不工作

Laravel 5.5用户事件侦听器不工作,laravel,events,laravel-5,laravel-5.5,Laravel,Events,Laravel 5,Laravel 5.5,我已经设置了一个事件,每当用户成功注册时都应该运行该事件。事件将运行,但侦听器处理程序从未触发 有人知道我做错了什么吗?我正在本地开发服务器(wamp)上使用Laravel5.5 它甚至没有到达监听器的handle()函数,我在那里放了一个转储文件进行测试 下面是我的代码: 活动: class UserRegisteredEmail extends Event { use InteractsWithSockets, SerializesModels; public $user;

我已经设置了一个事件,每当用户成功注册时都应该运行该事件。事件将运行,但侦听器处理程序从未触发

有人知道我做错了什么吗?我正在本地开发服务器(wamp)上使用Laravel5.5

它甚至没有到达监听器的
handle()
函数,我在那里放了一个转储文件进行测试

下面是我的代码:

活动:

class UserRegisteredEmail extends Event {
    use InteractsWithSockets, SerializesModels;

    public $user;
    public $password;

    public function __construct($user, $password)
    {
        $this->user = $user;
        $this->password = $password;
    }

    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}
事件侦听器:

 class UserRegisteredEmailListener {

    public function __construct()
    {
    }

    public function handle(UserRegisteredEmail $event)
    {
        Notification::send($event->user, new NewAccountEmail($event->password));
    }
}
EventServiceProvider:

class EventServiceProvider extends ServiceProvider
{

    protected $listen = [
        'App\Events\Event' => [
            'App\Listeners\EventListener',
            'App\Listeners\UserRegisteredEmailListener'
        ],
    ];


    public function boot()
    {
        parent::boot();
        //
    }
}
UserService
事件调度的位置:

    DB::transaction(function () use ($user, $password, $role, $sendEmail) {
                    $this->userMeta->firstOrCreate([
                        'user_id' => $user->id
                    ]);

                if ($sendEmail) {
                    event(new UserRegisteredEmail($user, $password));
                }
            });

您需要注册它:

protected $listen = [
    'App\Events\UserRegisteredEmail' => [
        'App\Listeners\EventListener',
        'App\Listeners\UserRegisteredEmailListener'
    ],
];
listen属性包含所有事件(键)及其侦听器(值)的数组。当然,您可以根据应用程序的需要向该阵列添加任意数量的事件


如果这是您真正的
EventServiceProvider
它不正确,那么它应该更像:

protected $listen = [
    'App\Events\UserRegisteredEmail' => [
        'App\Listeners\UserRegisteredEmailListener'
    ],
];

作为一个单独但半相关的注释,您可能希望将一些类重命名为更通用的类。如果您希望在将来添加任何其他事件/侦听器,这将有所帮助。也许
App\Events\UserRegisteredEmail
可以更改为
App\Events\userwasweated
App\Listeners\userregisteredemailistener
可以更改为
App\Listeners\SendUserWelcomeEmail
,这似乎奏效了!你能解释一下为什么$listen属性中的原始数组不能使用它吗?只要它允许,我就接受。感谢您的
UserRegisteredEmail
类从未在提供程序中设置为事件,因此Laravel不知道在调用它时它必须处理您的事件。对于
$listen
中的每个数组项,必须将事件指定为一个新键,然后该值将是一个侦听器数组。在我的回答中,我们指定
UserRegisteredEmail
是Laravel将查找的事件,它执行的侦听器就是
userregisteredemailstener
。谢谢你的澄清。