我已经设置了一个应该在用户注册成功时运行的事件。事件运行但从不触发侦听器处理程序。
任何人都知道我在这里做错了什么?我在本地开发服务器(wamp)上使用Laravel 5.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));
}
});
答案 0 :(得分:1)
如果这是你的真实EventServiceProvider
它不是正确的,它应该更像是:
protected $listen = [
'App\Events\UserRegisteredEmail' => [
'App\Listeners\UserRegisteredEmailListener'
],
];
单独但半相关的注释,您可能希望将某些类重命名为更通用。如果您想添加任何其他事件/侦听器,这有助于将来。可能App\Events\UserRegisteredEmail
可能会更改为App\Events\UserWasCreated
而App\Listeners\UserRegisteredEmailListener
可能会更改为App\Listeners\SendUserWelcomeEmail
答案 1 :(得分:0)
您需要注册:
protected $listen = [
'App\Events\UserRegisteredEmail' => [
'App\Listeners\EventListener',
'App\Listeners\UserRegisteredEmailListener'
],
];
listen属性包含所有事件(键)及其侦听器(值)的数组。当然,您可以根据应用程序的需要向此数组添加任意数量的事件。
https://laravel.com/docs/5.5/events#registering-events-and-listeners