Laravel 5.5用户事件监听器无法正常工作

时间:2018-01-23 13:20:28

标签: laravel events laravel-5 laravel-5.5

我已经设置了一个应该在用户注册成功时运行的事件。事件运行但从不触发侦听器处理程序。

任何人都知道我在这里做错了什么?我在本地开发服务器(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));
                }
            });

2 个答案:

答案 0 :(得分:1)

如果这是你的真实EventServiceProvider它不是正确的,它应该更像是:

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

单独但半相关的注释,您可能希望将某些类重命名为更通用。如果您想添加任何其他事件/侦听器,这有助于将来。可能App\Events\UserRegisteredEmail可能会更改为App\Events\UserWasCreatedApp\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