Szukaj…
Korzystanie ze zdarzenia i nasłuchiwania do wysyłania wiadomości e-mail do nowego zarejestrowanego użytkownika
Wydarzenia Laravela pozwalają na wdrożenie wzorca Observer. Można to wykorzystać do wysłania wiadomości powitalnej do użytkownika, ilekroć zarejestruje się on w Twojej aplikacji.
Nowe zdarzenia i detektory można generować za pomocą narzędzia wiersza polecenia rzemieślnik po zarejestrowaniu zdarzenia i ich konkretnego detektora w klasie App\Providers\EventServiceProvider
.
protected $listen = [
'App\Events\NewUserRegistered' => [
'App\Listeners\SendWelcomeEmail',
],
];
Alternatywna notacja:
protected $listen = [
\App\Events\NewUserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
],
];
Teraz uruchom php artisan generate:event
. To polecenie wygeneruje wszystkie odpowiednie zdarzenia i detektory wymienione powyżej odpowiednio w katalogach App\Events
i App\Listeners
.
Możemy mieć wielu słuchaczy na jedno wydarzenie, takie jak
protected $listen = [
'Event' => [
'Listner1', 'Listener2'
],
];
NewUserRegistered
to tylko klasa opakowania dla nowo zarejestrowanego modelu użytkownika:
class NewUserRegistered extends Event
{
use SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
}
To Event
będzie obsługiwane przez odbiornik 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);
});
}
}
Ostatnim krokiem jest wywołanie / uruchomienie zdarzenia za każdym razem, gdy rejestruje się nowy użytkownik. Można to zrobić w kontrolerze, poleceniu lub usłudze, niezależnie od tego, gdzie wdrożono logikę rejestracji użytkownika:
event(new NewUserRegistered($user));