Live Coding : Utiliser les notifications e-mail avec Symfony 4

Temps de lecture : 12 minutes environ.

Nous avons vu dans un article précédent comment envoyer des e-mails avec Symfony 4.



Dans certains cas, ces e-mails doivent être envoyés depuis plusieurs méthodes de contrôleurs. Il serait donc judicieux de ne pas avoir à répéter les mêmes lignes de code dans chacun des contrôleurs.



Nous allons donc créer un système de notifications qui pourront facilement être appelées chaque fois que nécessaire.



ATTENTION : ces notifications n'ont rien à voir avec le Notifier de Symfony à partir de la version 4.4. Elles sont principalement adaptées aux versions 4 de Symfony jusqu'à la version 4.3



Création des classes



Nous allons créer un nouveau dossier "Notifications" dans le dossier "src".



Dans ce dossier, nous allons, par exemple, créer un fichier "NouveauCompteNotification.php" qui servira à informer l'administrateur de la création d'un nouveau compte.



Ce fichier contiendra le code suivant




<?php


namespace App\Notifications;

// On importe les classes nécessaires à l'envoi d'e-mail et à Twig
use Swift_Message;
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;

class CreationCompteNotification
{
/**
* Propriété contenant le module d'envoi de mail
*
* @var \Swift_Mailer
*/
private $mailer;

/**
* Propriété contenant l'environnement twig
*
* @var Environment
*/
private $renderer;

/**
* Constructeur de classe
* @param Swift_Mailer $mailer
* @param Environment $renderer
*/
public function __construct(\Swift_Mailer $mailer, Environment $renderer)
{
$this->mailer = $mailer;
$this->renderer = $renderer;
}

/**
* Méthode de notification (envoi de mail)
*
* @throws LoaderError
* @throws RuntimeError
* @throws SyntaxError
*/
public function notify()
{
// On construit le mail
$message = (new Swift_Message('Mon Blog - Nouvelle inscription'))
// Expéditeur
->setFrom('no-reply@monblog.fr')
// Destinataire
->setTo('contact@monblog.fr')
// Corps du message (créé avec twig)
->setBody(
$this->renderer->render(
'emails/ajout_compte.html.twig'
),
'text/html'
);

// On envoie le mail
$this->mailer->send($message);
}
}


Le contrôleur



Une fois le fichier de notification créé, nous allons l'ajouter à notre contrôleur d'inscription "RegistrationController" de la façon suivante



Ajout de la ligne "use" ci-dessous pour importer la notification




use App\Notifications\CreationCompteNotification;


Création d'une propriété privée dans le contrôleur



On crée une propriété dans le contrôleur permettant de "stocker" la notification




/**
* @var CreationCompteNotification
*/
private $notify_creation;


Ajout d'un constructeur



On ajoute un constructeur pour instancier la/les notification(s)




/**
* RegistrationController constructor.
* @param CreationCompteNotification $notify_creation
*/
public function __construct(CreationCompteNotification $notify_creation)
{
$this->notify_creation = $notify_creation;
}


Envoi de l'e-mail



Il suffira enfin d'appeler la ligne ci-dessous quand un e-mail devra être envoyé




$this->notify_creation->notify();


Le fichier twig



Il est enfin nécessaire de créer un fichier twig pour mettre en forme le contenu de l'e-mail à envoyer. Dans la notification, nous faisons appel à un fichier nommé "ajout_compte.html.twig" qui se trouve dans un dossier "emails".



Nous allons donc créer (s'il n'existe pas) le dossier "emails" dans "templates".



Nous créons ensuite le fichier "ajout_compte.html.twig", celui-ci contiendra le code html de l'e-mail à envoyer.




<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nouvelle inscription</title>
</head>
<body>
<h1>Nouveau compte</h1>
<p>Un nouveau compte a été créé</p>
</body>
</html>


Envoyer des données



Si il s'avère nécessaire d'envoyer des données provenant du contrôleur à l'intérieur de l'e-mail, il faudra apporter quelques modifications dans la notification, le contrôleur et le fichier twig.



Ce point est traité dans la vidéo en début d'article.



Obtenir de l'aide



Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat

Live Coding : Utiliser les notifications e-mail avec Symfony 4
Article publié le - Modifié le

Catégories : Tutoriel Symfony Live-Coding

Mots-clés : Tutoriel Controllers Symfony Live-Coding html5 css3 emails notifications

Partager : Partager sur Facebook Partager sur Twitter Partager sur LinkedIn