Поиск…
Использование событий и прослушивателей для отправки электронной почты новому зарегистрированному пользователю
События Laravel позволяют реализовать шаблон Observer. Это можно использовать для отправки приветственного письма пользователю, когда они регистрируются в вашем приложении.
Новые события и слушатели могут быть сгенерированы с помощью утилиты командной строки artisan после регистрации события и их конкретного слушателя в классе App\Providers\EventServiceProvider
.
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
- это всего лишь класс-оболочка для недавно зарегистрированной модели пользователя:
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('[email protected]', 'John Doe');
$message->subject('Welcome aboard '.$user->name.'!');
$message->to($user->email);
});
}
}
Последний шаг - вызывать / запускать событие каждый раз, когда регистрируется новый пользователь. Это можно сделать в контроллере, команде или службе, где бы вы не реализовали логику регистрации пользователя:
event(new NewUserRegistered($user));