TemplatedEmail Symfony : des e-mails HTML rendus par Twig
TemplatedEmail, dans Symfony Mailer, est un e-mail dont le contenu HTML est rendu par un template Twig, avec son contexte, comme une page du site.
$this->mailer->send((new TemplatedEmail()) ->to(new Address($reservation->getEmail(), (string) $reservation->getNom())) ->subject('Votre table au Dragon Ivre') ->htmlTemplate('emails/confirmation.html.twig') ->context(['reservation' => $reservation])); // Dans le template, un lien absolu, qui fonctionne depuis une boîte aux lettres : // <a href="{{ url('app_menu') }}">Découvrir la carte</a>
La classe vient du pont Twig, Symfony\Bridge\Twig\Mime\TemplatedEmail. On choisit le template avec htmlTemplate(), on passe les variables avec context(), et Symfony rend le tout au moment de l'envoi, en tirant du HTML une version texte pour les messageries qui ne l'affichent pas. Ranger ces envois dans un service dédié évite de répéter sujet et template dans chaque contrôleur. Deux pièges : la variable email est réservée dans le contexte, car le template y reçoit l'e-mail lui-même ; et path() produit /menu, une adresse relative qui ne mène nulle part depuis une boîte aux lettres, là où url() donne l'adresse complète. Le style, faute de feuille de style, s'écrit dans les balises.
Les exercices font passer le parchemin de confirmation du contrôleur à un service, le parcheminier, avec un vrai template mis en page et un lien vers la carte ; puis, pour les inscriptions aux soirées de contes, envoyer un parchemin qui rappelle la soirée, seulement quand l'inscription est enregistrée, jamais quand elle est refusée.
2 exercices font travailler cette notion, en écrivant du code dans le navigateur.
Dans les parcours
- Un parchemin qui a de l'allure Symfony pour les devs PHP · chapitre 10 : La vie d'une réservation
- Les inscriptions Symfony pour les devs PHP · chapitre 12 : Le grand service