使用事件和侦听器向新注册用户发送电子邮件

Laravel 的事件允许实现 Observer 模式。这可用于在用户注册你的应用程序时向用户发送欢迎电子邮件。

App\Providers\EventServiceProvider 类中注册事件及其特定侦听器后,可以使用 artisan 命令行实用程序生成新事件和侦听器。

protected $listen = [
    'App\Events\NewUserRegistered' => [
        'App\Listeners\SendWelcomeEmail',
    ],
];

替代符号:

protected $listen = [
    \App\Events\NewUserRegistered::class => [
        \App\Listeners\SendWelcomeEmail::class,
    ],
];

现在执行 php artisan generate:event。此命令将分别在 App\EventsApp\Listeners 目录中生成上面提到的所有相应事件和监听器。

我们可以为一个单独的事件提供多个监听器

protected $listen = [
    'Event' => [
        'Listner1', 'Listener2'
    ],
];

NewUserRegistered 只是新注册的 User 模型的包装类:

class NewUserRegistered extends Event
{
    use SerializesModels;

    public $user;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

这个 Event 将由 SendWelcomeEmail 听众处理:

class SendWelcomeEmail
{
    /**
     * Handle the event.
     *
     * @param  NewUserRegistered  $event
     */
    public function handle(NewUserRegistered $event)
    {
        //send the welcome email to the user
        $user = $event->user;
        Mail::send('emails.welcome', ['user' => $user], function ($message) use ($user) {
                $message->from('hi@yourdomain.com', 'John Doe');
                $message->subject('Welcome aboard '.$user->name.'!');
                $message->to($user->email);
        });
    }
}

最后一步是在新用户注册时调用/触发事件。无论你在何处实现用户注册逻辑,都可以在控制器,命令或服务中完成此操作:

event(new NewUserRegistered($user));