使用事件和偵聽器向新註冊使用者傳送電子郵件
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\Events
和 App\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));