使用事件和偵聽器向新註冊使用者傳送電子郵件

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));