Nouvelle-Techno.fr

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