Come utilizzare gli eventi e gli ascoltatori di Laravel nella tua applicazione
Laravel è dotato di diverse funzioni interessanti al suo interno. Alcuni di questi sono Broadcasting, File Storage, Notifiche, Eventi, ecc. Ognuna di queste funzionalità integrate aiuta gli sviluppatori a semplificare le attività comuni e complicate.
In questo articolo, discutiamo di Laravel Events che ci consentono di registrare un listener per eventi specifici che si verificano nell’applicazione. In altre parole, posso dire utente registrato, ordine effettuato, prodotto aggiunto, tutti questi sono gli eventi. E se hai bisogno di attivare qualche azione dopo questi eventi puoi registrare gli ascoltatori. Laravel chiama automaticamente gli ascoltatori registrati per eventi specifici.
Per il nostro articolo, implementerò un evento per la registrazione degli utenti. Una volta che un utente si è registrato all’applicazione, il sistema dovrebbe inviargli un’e-mail di benvenuto. Qui la registrazione dell’utente è l’evento e l’invio di un’e-mail di benvenuto è un ascoltatore.
Detto questo, vediamo come utilizzare eventi e listener nella tua applicazione Laravel.
Registrazione di eventi e ascoltatori in Laravel
Laravel fornisce EventServiceProvider
file in cui è necessario registrare i propri eventi e ascoltatori. Nel nostro caso dobbiamo aggiungere un evento e un listener per la registrazione dell’utente. Quindi, apri il file EventServiceProvider.php
e aggiungi l’ UserRegistered
evento al suo interno.
app/Providers/EventServiceProvider.php
...
...
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'AppEventsUserRegistered' => [
'AppListenersSendWelcomeEmail',
],
];
L’utente può aggiungere tanti eventi a questo array a seconda delle esigenze. Quindi, genera eventi Laravel eseguendo il comando:
php artisan event:generate
Questo comando crea le directory "Eventi" e "Ascoltatori" nella cartella "app". All’interno della directory ‘app/Events’ troverai il file UserRegistered.php
. Allo stesso modo, il SendWelcomeEmail.php
file si trova nella directory "app/Listeners".
Definizione di eventi e ascoltatori
Ora sei pronto con il boilerplate per il tuo evento registrato dall’utente. Il nostro obiettivo è inviare un’e-mail di benvenuto all’utente dopo la registrazione. Per inviare un’e-mail abbiamo bisogno di un oggetto utente che contenga le informazioni dell’utente. Nel UserRegistered
caso in cui ho passato un oggetto utente al suo costruttore. Questo oggetto passerà quindi all’ascoltatore.
app/Eventi/UserRegistered.php
<?php
namespace AppEvents;
....
use AppUser;
class UserRegistered
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
}
Il codice che invia un’email a un utente andrà all’interno del file listener. Apri listener SendWelcomeEmail
e scrivi il codice come segue.
app/Listeners/SendWelcomeEmail.php
<?php
namespace AppListeners;
....
use Mail;
class SendWelcomeEmail
{
....
....
/**
* Handle the event.
*
* @param UserRegistered $event
* @return void
*/
public function handle(UserRegistered $event)
{
$data = array('name' => $event->user->name, 'email' => $event->user->email, 'body' => 'Welcome to our website. Hope you will enjoy our articles');
Mail::send('emails.mail', $data, function($message) use ($data) {
$message->to($data['email'])
->subject('Welcome to our Website');
$message->from('[email protected]');
});
}
}
Nel file sopra, ho scritto il codice per l’invio di email nel handle
metodo della classe listener. Questo perché il handle
metodo riceve una chiamata dopo il verificarsi di un evento di registrazione dell’utente.
Ho anche usato il primo parametro come ’emails.mail’ nel metodo Mail. Significa che dovresti creare un resources/views/emails/mail.blade.php
file.
mail.blade.php
Hi <strong>{{ $name }}</strong>,
<p>{{ $body }}</p>
Chiama finalmente l’evento
A questo punto, tutto pronto con il tuo evento e ascoltatore. L’ultimo passaggio è chiamare l’evento dal luogo appropriato. Supponiamo che tu stia utilizzando "UserController" per registrare un utente. Quindi dal UserController
, puoi chiamare l’evento come segue.
app/Http/Controllers/UserController.php
<?php
namespace AppHttpControllers;
....
use AppEventsUserRegistered;
use AppUser;
class UserController extends Controller
{
.....
.....
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$user = User::create([
'name' => $request->input('name'),
'email' => $request->input('email'),
'password' => bcrypt($request->input('password')),
]);
// call our event here
event(new UserRegistered($user));
return $user;
}
}
Ora, quando un utente si registra, il codice sopra dà una chiamata all’evento "UserRegistered" che alla fine chiama l’ascoltatore. L’ascoltatore invia quindi un’e-mail di benvenuto all’utente.
Spero che tu capisca come utilizzare eventi e listener nella tua applicazione Laravel. Per favore condividi i tuoi pensieri e suggerimenti nella sezione commenti qui sotto.
articoli Correlati
- Come utilizzare Laravel Passport per l’autenticazione API REST
- Invio di e-mail tramite il server SMTP di Gmail in Laravel
- Sistema di registrazione e accesso utente in Laravel