Benvenuto al Laravel Cafè! Ogni settimana proporremo un nuovo argomento sul mondo Laravel, quindi trova un posto libero, prendi un caffè e condividi le tue opinioni con la comunità! L’idea è di creare un punto di discussione. Se hai qualche perplessità sull’argomento trattato, leggi fino alla fine e fai una domanda usando il forum! Cercheremo di risponderci a vicenda e di aiutarci, ed il confronto ci farà crescere tutti un po’ di più.
Di mercoledì in mercoledì parleremo di qualcosa di diverso, quindi tornaci a trovare! Potresti dare una mano a qualcuno in difficoltà, o ricevere tu un aiuto in caso di problemi! Dai, siediti, il primo caffè lo offriamo noi.
L’Argomento
A partire dalla versione 5.3 di Laravel, è stato implementato un sistema di gestione delle notifiche di cui non si è molto discusso nei vari canali di Laravel Italia, ma che approfondiamo oggi nella nostra consueta pausa caffè. Il primo consiglio è sempre quello di partire dalla documentazione ufficiale, la quale fornisce una visione dettagliata di quanto messo a disposizione dal framework. Nel perfetto stile Laravel le funzioni sono molto semplici e intuitive e dato il grosso quantitativo di automazioni per la gestione delle notifiche, si può creare un sistema base, caratterizzato da un’alta scalabilità, in poco tempo.
Ancora in piedi? Accomodati, ordina un caffè ed esploriamo sempre più nel dettaglio quali sono i servizi messi a disposizione, le principali caratteristiche di una notifica e come implementare il tutto con un po’ di codice d’esempio.
The Notifiable Trait
Prima di capire come creare ed inviare una notifica, approfondiamo prima il mezzo attraverso la notifica viene elaborata. Qualunque modello che implementi il trait IlluminateNotificationsNotifiable
può essere utilizzato come oggetto adibito alla ricezione di notifiche attraverso uno o più canali messi a disposizione dal framework. Allo stesso modo può essere utilizata la facade Notification
per, ad esempio, inviare ad una collezione di oggetti una notifica via mail o sms. Se esploriamo a fondo il codice del trait, vedremo che mette a disposizione della classe i metodi per recuperare le notifiche relative a quel modello e, a seconda del canale scelto, recuperare le informazioni necessarie all’invio.
Il modello AppUser
implementa di default il trait IlluminateNotificationsNotifiable
e lo useremo, senza effettuare modifiche, per sviluppare l’esempio finale.
Notifications
La creazione di una notifica, può essere comodamente eseguita attraverso il comando php artisan make:notification
, il quale crea un oggetto notifica all’interno della cartella app/Notifications
(a sua volta automaticamente generata). La struttura anche qui è molto intuitiva e presenta:
– Un costruttore per una creazione più personalizzata dell’oggetto notifica.
– Un metodo via()
che definisce un array contenente i canali attraverso i quali la notifica verrà diffusa.
– Tre possibili metodi definibili o modificabili a seconda delle necessità:
– toMail()
: ritorna un oggetto IlluminateNotificationsMessagesMailMessage
che può essere formattato a seconda delle necessità, come al tempo stesso la sua view di riferimento può essere customizzata attraverso il comando php artisan vendor:publish --tag=laravel-notifications
.
– toArray()
: utilizzato sia per restituire la notifica in formato JSON che per salvarla all’interno del database.
– toDatabase()
: da implementare nel caso in cui il salvataggio della notifica sul database richieda campi diversi da quelli ritornati in JSON.
Guida all’uso
Se hai avuto modo di confrontare quanto visto fino ad ora con la documentazione per approfondire l’argomento, avrai notato il dettaglio sui vari canali utilizzabili e i metodi che implementano. Nell’ordine:
– Mail
– Database
– Broadcast
– SMS
– Slack
Come ho anticipato la documentazione è molto dettagliata ed esaustiva, per questo ritengo più opportuno specificare delle linee guida per creare un sistema di notifica efficente, valutando le possibili alternative sui canali da utilizzare a seconda delle esigenze.
Il tutto verrà completato dalla creazione di un esempio pratico, una mini applicazione Laravel che implementa un sistema di gestione della notifica di avvenuta modifica della password utente.
Mail
Penso il canale più semplice e immediato. In pochi minuti si è in grado di gestire una notifica via mail, sia come logica di business che come view finale, penso sia particolarmente indicata come alternativa alle classiche mail riepilogative o per far compiere azioni rapide ad un utente (ad esempio la conferma di registrazione ad una promozione).
Database
Secondo me questo canale è abbastanza fondamentale se si vuole tenere traccia sia dello storico delle notifiche che delle azioni compiute su di esse (vedi dettaglio documentazione markAsRead()
).
Broadcast, SMS, Slack
Le ciliegine sulla torta. Magari più laboriose, richiedono test più accurati (o nel caso degli SMS l’attivazione di un servizio di parti terze), ma a livello di interfaccia utente il risultato finale è sicuramente il più interessante, soprattutto se si è appassionati di VueJs o SocketIO.
L’esempio
/*
* TO DO
*/
E Voi?
/*
* CONCLUSIONE
*/