Ricerca…
Utilizzo di eventi e ascoltatori per l'invio di e-mail a un nuovo utente registrato
Gli eventi di Laravel permettono di implementare il modello di Osservatore. Questo può essere usato per inviare una email di benvenuto ad un utente ogni volta che si registrano sulla tua applicazione.
Nuovi eventi e ascoltatori possono essere generati utilizzando l'utilità della riga di comando artisan dopo aver registrato l'evento e il loro particolare listener nella classe App\Providers\EventServiceProvider
.
protected $listen = [
'App\Events\NewUserRegistered' => [
'App\Listeners\SendWelcomeEmail',
],
];
Notazione alternativa:
protected $listen = [
\App\Events\NewUserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
],
];
Ora esegui php artisan generate:event
. Questo comando genererà tutti gli eventi e gli ascoltatori corrispondenti menzionati sopra rispettivamente nelle directory App\Events
e App\Listeners
.
Possiamo avere più ascoltatori per un singolo evento come
protected $listen = [
'Event' => [
'Listner1', 'Listener2'
],
];
NewUserRegistered
è solo una classe wrapper per il modello Utente appena registrato:
class NewUserRegistered extends Event
{
use SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
}
Questo Event
sarà gestito dal listener 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);
});
}
}
L'ultimo passaggio consiste nel chiamare / attivare l'evento ogni volta che si registra un nuovo utente. Questo può essere fatto nel controller, nel comando o nel servizio, ovunque sia implementata la logica di registrazione dell'utente:
event(new NewUserRegistered($user));