Notifiche in Laravel

In questo articolo, esploreremo il sistema di notifica nel framework web di Laravel. Il sistema di notifica in Laravel consente di inviare notifiche agli utenti su diversi canali. Oggi parleremo di come è possibile inviare notifiche tramite il canale di posta elettronica.

Nozioni di base sulle notifiche

Durante lo sviluppo dell'applicazione, è spesso necessario informare gli utenti delle diverse modifiche allo stato. Potrebbe essere l'invio di notifiche e-mail quando lo stato dell'ordine è cambiato o l'invio di un SMS sulla loro attività di accesso per motivi di sicurezza. In particolare, stiamo parlando di messaggi brevi e forniscono solo informazioni dettagliate sui cambiamenti di stato.

Laravel fornisce già una funzione integrata che ci aiuta a ottenere qualcosa di simile: le notifiche. In effetti, rende l'invio di messaggi di notifica agli utenti un gioco da ragazzi e un'esperienza divertente!

La bellezza di questo approccio è che ti permette di scegliere tra diversi canali su cui verranno inviate le notifiche. Passiamo rapidamente attraverso i diversi canali di notifica supportati da Laravel.

  • mail: Le notifiche verranno inviate sotto forma di e-mail agli utenti.
  • SMS: Come suggerisce il nome, gli utenti riceveranno notifiche SMS sul proprio telefono.
  • Slack: In questo caso, le notifiche verranno inviate sui canali Slack.
  • Banca dati: Questa opzione ti consente di memorizzare le notifiche in un database se desideri creare un'interfaccia utente personalizzata per visualizzarle.

Tra i diversi canali di notifica, utilizzeremo il canale di posta nel nostro caso d'uso di esempio che svilupperemo nel corso di questo tutorial.

In effetti, sarà un caso d'uso piuttosto semplice che consente agli utenti della nostra applicazione di inviare messaggi a ciascun utente. Quando gli utenti ricevono un nuovo messaggio nella loro casella di posta, li informeremo di questo evento inviando loro un'email. Certo, lo faremo usando la funzione di notifica di Laravel!

Crea una classe di notifica personalizzata

Come discusso in precedenza, creeremo un'applicazione che consente agli utenti della nostra applicazione di inviare messaggi tra loro. D'altra parte, notificheremo agli utenti quando ricevono un nuovo messaggio da altri utenti via e-mail.

In questa sezione creeremo i file necessari per implementare il caso d'uso che stiamo cercando.

Per cominciare, creiamo il Messaggio modello che tiene reciprocamente i messaggi inviati dagli utenti.

$ php artisan make: model Message --migration

Abbiamo anche bisogno di aggiungere alcuni campi come a, a partire dal e Messaggio al messaggi tavolo. Quindi cambiamo il file di migrazione prima di eseguire il migrare comando.

incrementi ( 'id'); $ table-> intero ('from', FALSE, TRUE); $ table-> integer ('to', FALSE, TRUE); $ Tavola-> testo ( 'messaggio'); $ Tavola-> timestamp (); );  / ** * Invertire le migrazioni. * * @return void * / public function down () Schema :: dropIfExists ('messages'); 

Ora, eseguiamo il comando migrate che crea la tabella dei messaggi nel database.

$ php artisan migrate

Quello dovrebbe creare il messaggi tabella nel database.

Inoltre, assicurati di aver abilitato il sistema di autenticazione Laravel predefinito in modo che funzioni come la registrazione e l'accesso funzionino immediatamente. Se non sei sicuro di come farlo, la documentazione di Laravel fornisce una rapida panoramica di ciò.

Poiché ogni notifica in Laravel è rappresentata da una classe separata, è necessario creare una classe di notifica personalizzata che verrà utilizzata per informare gli utenti. Usiamo il seguente comando artisan per creare una classe di notifica personalizzata: NewMessage.

$ php artisan make: notifica NewMessage

Quello dovrebbe creare il app / notifiche / NewMessage.php classe, quindi sostituiamo il contenuto di quel file con il seguente contenuto.

fromUser = $ utente;  / ** * Ottieni i canali di consegna della notifica. * * @param mixed $ notifiable * @return array * / public function tramite ($ notifiable) return ['mail'];  / ** * Ottieni la rappresentazione della posta della notifica. * * @param mixed $ notifiable * @return \ Illuminate \ Notifications \ Messages \ MailMessage * / public function toMail ($ notifiable) $ subject = sprintf ('% s: hai un nuovo messaggio da% s!' , config ('app.name'), $ this-> fromUser-> nome); $ greeting = sprintf ('Ciao% s!', $ notifiable-> nome); return (new MailMessage) -> subject ($ subject) -> greeting ($ greeting) -> saluto ('Yours Faithfully') -> line ('L'introduzione alla notifica.') -> action ('Azione di notifica', url ('/')) -> line ('Grazie per aver usato la nostra applicazione!');  / ** * Ottieni la rappresentazione dell'array della notifica. * * @param mixed $ notifiable * @return array * / public function toArray ($ notifiable) return [//]; 

Dato che useremo il canale di posta per inviare notifiche agli utenti, il attraverso il metodo è configurato di conseguenza. Quindi questo è il metodo che ti permette di configurare il tipo di canale di una notifica.

Avanti, c'è il spedire una lettera metodo che ti permette di configurare vari parametri email. In effetti, il spedire una lettera il metodo dovrebbe restituire l'istanza di \ Illuminate \ Comunicazioni \ Messaggi \ MailMessage, e quella classe fornisce metodi utili che consentono di configurare i parametri di posta elettronica.

Tra i vari metodi, il linea metodo consente di aggiungere una singola riga in un messaggio. D'altra parte, c'è il azione metodo che consente di aggiungere un pulsante di invito all'azione in un messaggio.

In questo modo, puoi formattare un messaggio che verrà inviato agli utenti. Ecco come si suppone di configurare la classe di notifica mentre si utilizza il canale di posta per inviare notifiche.

Alla fine, è necessario assicurarsi di implementare i metodi necessari in base al tipo di canale configurato nel attraverso metodo. Ad esempio, se si utilizza il canale del database che memorizza le notifiche in un database, non è necessario configurare il spedire una lettera metodo; invece, dovresti implementare il toArray metodo, che formatta i dati che devono essere memorizzati in un database.

Come inviare notifiche

Nella sezione precedente, abbiamo creato una classe di notifica pronta per inviare notifiche. In questa sezione creeremo dei file che dimostrano come potresti effettivamente inviare notifiche usando il Nuovo messaggio classe di notifica.

Creiamo un file di controller su app / Http / Controller / NotificationController.php con i seguenti contenuti.

middleware ( 'auth');  public function index () // utente 2 invia un messaggio all'utente 1 $ message = new Message; $ message-> setAttribute ('from', 2); $ message-> setAttribute ('to', 1); $ message-> setAttribute ('message', 'Demo message from user 2 to user 1.'); $ Message-> save (); $ fromUser = User :: find (2); $ toUser = User :: find (1); // invia una notifica usando il modello "utente", quando l'utente riceve un nuovo messaggio $ toUser-> notify (new NewMessage ($ fromUser)); // invia una notifica usando la notifica Notification :: send ($ toUser, new NewMessage ($ fromUser)); 

Naturalmente, è necessario aggiungere un percorso associato in percorsi / web.php file.

Route :: get ('notify / index', 'NotificationController @ index');

Ci sono due modi in cui Laravel ti consente di inviare notifiche: utilizzando l'entità notificabile o la facciata di notifica.

Se la classe del modello entità utilizza il Illuminare \ Notifiche \ notificabile tratto, quindi si potrebbe chiamare il notificare metodo su quel modello. Il App \ User la classe implementa il denuncia caratteristica e quindi diventa l'entità notificabile. D'altra parte, potresti anche usare il Illuminare \ Support \ Facciate \ Notifica Facciata per inviare notifiche agli utenti.

Passiamo al indice metodo del controller.

Nel nostro caso, notificheremo agli utenti quando ricevono un nuovo messaggio. Quindi abbiamo cercato di imitare quel comportamento nel indice metodo in primo luogo.

Successivamente, abbiamo avvisato l'utente destinatario di un nuovo messaggio utilizzando il notificare metodo sul $ touser oggetto, come è il denuncia entità.

$ toUser-> notify (new NewMessage ($ fromUser));

Potresti aver notato che anche noi passiamo il $ fROMUSER oggetto nel primo argomento del __costruire metodo, dal momento che vogliamo includere il a partire dal nome utente in un messaggio.

D'altra parte, se vuoi imitarla usando il Notifica facciata, è abbastanza facile farlo utilizzando il seguente frammento.

Notifica :: send ($ toUser, new NewMessage ($ fromUser));

Come puoi vedere, abbiamo usato il inviare metodo della facciata di notifica per inviare una notifica a un utente.

Vai avanti e apri l'URL http: // your-laravel-site-domain / notify / index nel tuo browser. Se non hai ancora effettuato l'accesso, verrai reindirizzato alla schermata di accesso. Una volta effettuato l'accesso, dovresti ricevere un'email di notifica all'indirizzo e-mail allegato all'utente 1.

Ci si potrebbe chiedere come il sistema di notifica rileva il a indirizzo quando non lo abbiamo ancora configurato da nessuna parte. In tal caso, il sistema di notifica tenta di trovare il file e-mail proprietà nell'oggetto notificabile. E il App \ User la classe oggetto ha già quella proprietà poiché stiamo usando il sistema di autenticazione Laravel predefinito.

Tuttavia, se si desidera ignorare questo comportamento e si desidera utilizzare una proprietà diversa diversa dalla posta elettronica, è sufficiente definire il seguente metodo nella classe di notifica.

public function routeNotificationForMail () return $ this-> email_address; 

Ora, il sistema di notifica dovrebbe cercare il indirizzo email proprietà invece del e-mail proprietà per recuperare il a indirizzo.

E questo è come usare il sistema di notifica in Laravel. Questo ci porta alla fine di questo articolo!

Conclusione

Quello che abbiamo passato oggi è una delle funzioni utili, ma meno discusse, nelle notifiche di Laravel. Ti consente di inviare notifiche agli utenti su diversi canali.

Dopo una rapida introduzione, abbiamo implementato un esempio reale che dimostra come inviare notifiche tramite il canale di posta. In effetti, è molto utile nel caso di invio di brevi messaggi relativi a cambiamenti di stato nella tua applicazione.

Per quelli di voi che stanno appena iniziando con Laravel o stanno cercando di espandere le vostre conoscenze, il vostro sito o la vostra applicazione con estensioni, abbiamo una varietà di cose che potete studiare nel mercato Envato.

Se hai domande o suggerimenti, non esitare a pubblicarli utilizzando il feed qui sotto!