Come personalizzare i modelli di email di Laravel 5/6 di notifica

Come personalizzare i modelli di email di Laravel 5/6 di notifica

Va bene, quindi ho riscontrato questo problema per la creazione di un modello di posta elettronica per il mio Laravel 5.4 app. Era un'e -mail "benvenuta", utilizzando il modello di Laravel predefinito. La sfida era cambiare l'intestazione e il piè di pagina del modello.

Cerchiamo tutti di leggere la documentazione il più rapidamente possibile e se ciò non funziona, dopo 3 minuti di lettura della documentazione, passeremmo a StackOverflow o Laracast o a qualsiasi altro forum, aspettandoci un codice pronto "copia e incolla".

Continua…

Le cose sono facili se vuoi solo cambiare il messaggio di testo e hai molti esempi su come farlo, usando i componenti della posta. Tuttavia non ho trovato risposte su come cambiare l'intestazione e il piè di pagina predefiniti.

Componenti

Laravel 5.4 componenti postali introdotti. Puoi leggerlo qui.



$ slot

Questo sarebbe un componente di allerta, che è fondamentalmente un modello di lama. Quindi $ slot sarebbe una variabile/luogo per abbandonare il tuo contenuto da un altro modello/componente.

@Component ('Alert')
Whoops! Qualcosa è andato storto!
@EndComponent

Come quello. Questo renderebbe


Whoops! Qualcosa è andato storto!

Pubblica pubblicazione del fornitore

Inizialmente Laravel utilizzerà i loro componenti nascosti nel nucleo del framework, che puoi esportare facendo

PHP Artisan Vendor: Publish--Tag = Laravel-Mail

Creerà una cartella di posta e markdown all'interno della cartella Risorse/Visualizza/fornitore. All'interno troverai componenti come layout o intestazione ecc.

Creazione di notifica

Quello che vuoi fare è creare una notifica, un evento o una lezione di posta per licenziare un'e -mail quando succede qualcosa.

Ho deciso di andare con una notifica. Quando crei qualsiasi notifica (puoi leggere di più su come creare una notifica tramite Artisan) otterrai una lezione come questa:

APPP SPACE \ Notifiche;
Usa illuminare \ bus \ queueable;
Usa illuminare \ Notifiche \ Notifica;
Usa illuminare \ contratti \ queue \ dovrebbequeue;
Usa Illuminate \ Notifiche \ Messaggi \ MailMessage;
Classe User Register Extende Notification

Usa Queueable;
/**
* variabile di classe non documentata
*
* stringa @var
**/
utente pubblico $;
/**
* Crea una nuova istanza di notifica.
*
* @return void
*/
funzione pubblica __construct ($ utente)

$ this-> utente = $ utente;

/**
* Ottieni i canali di consegna della notifica.
*
* @param misto $ Notificable
* Array @return
*/
funzione pubblica tramite ($ Notificable)

return ['mail'];

/**
* Ottieni la rappresentazione della posta della notifica.
*
* @param misto $ Notificable
* @return \ illuminate \ Notifiche \ Messaggi \ MailMessage
*/
funzione pubblica Tomail ($ Notificable)

restituzione (nuovo MailMessage)
-> da ('info@a volte-it-wont-work.com ',' amministratore ')
-> soggetto ("benvenuto al portale")
-> Markdown ('Mail.Benvenuto.indice ', [' user '=> $ this-> user]);

/**
* Ottieni la rappresentazione dell'array della notifica.
*
* @param misto $ Notificable
* Array @return
*/
funzione pubblica Toarray ($ Notificable)

ritorno [
//
];

Qui, presta attenzione al metodo Tomail e al costruttore della classe perché passeremo un oggetto ad esso. Nota anche che stiamo usando

-> markdown ('alcuni.lama.php ');

Il prossimo passo è spingere questa notifica al lavoro. Da qualche parte nel tuo RegisterController potresti voler chiamare questo (non andare a come lo eseguirai, sincronizzati o coda ...). Non dimenticare di includere lo spazio dei nomi della notifica in alto.

$ user = user :: create ([
'name' => $ data ['name'],
'email' => $ data ['email'],
'lastname' => $ data ['lastname'],
'password' => bcrypt ($ data ['password']),
]);
$ utente-> notifica (new utente registrato ($ utente));

Perché sto andando così in profondità? Bene perché voglio anche mostrarti come trasmettere i tuoi dati nel modello di posta elettronica.

Successivamente puoi andare a Risorse/Visualizzazioni/Mail/Welcome/Index.lama.PHP (Può essere qualsiasi cartella e nome file che desideri) e incollare questo:

@Component ('Mail :: Layout')
-- Intestazione --
@slot ('header')
@Component ('Mail :: Header', ['url' => config ('app.URL ')])
Titolo dell'intestazione
@EndComponent
@endslot
-- Corpo --
Questo è il nostro messaggio principale $ user
-subcopy-
@isset ($ subcopy)
@slot ('subcopy')
@Component ('Mail :: subcopy')
$ subcopy
@EndComponent
@endslot
@Endisset
-footer-
@slot ('footer')
@Component ('Mail :: Footer')
© date ('y') config ('app.nome') . Super Footer!
@EndComponent
@endslot
@EndComponent

Ora puoi aggiungere facilmente qualsiasi immagine all'intestazione o cambiare il collegamento all'interno del piè di pagina ecc.

Spero che questo ti aiuti.

Seguimi su Twitter
Aggiungimi su LinkedIn