Laravel 5.5用户事件侦听器不工作
我已经设置了一个事件,每当用户成功注册时都应该运行该事件。事件将运行,但侦听器处理程序从未触发 有人知道我做错了什么吗?我正在本地开发服务器(wamp)上使用Laravel5.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;
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
。谢谢你的澄清。