Live Coding : Utiliser les notifications e-mail avec Symfony 4
Par Nouvelle-Techno.fr le 1 mai 2020 - Catégories : Tutoriel Symfony Live-Coding
Lire l'article sur le site d'origine
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
#Tutoriel #Controllers #Symfony #Live-Coding #html5 #css3 #emails #notifications