РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
780 of 1361 menu

Класс TemplatedEmail

Класс TemplatedEmail расширяет класс Email и позволяет формировать тело письма на основе Twig-шаблонов. Вместо того чтобы вручную собирать HTML-строку, вы указываете имя шаблона и передаёте данные через контекст. Первым параметром метода htmlTemplate передаётся имя HTML-шаблона, метода textTemplate - имя текстового шаблона, а метод context принимает массив переменных для подстановки.

Синтаксис

<?php use Symfony\Bridge\Twig\Mime\TemplatedEmail; $email = (new TemplatedEmail()) ->from('sender@example.com') ->to('recipient@example.com') ->subject('Тема письма') ->htmlTemplate('email/index.html.twig') ->textTemplate('email/index.txt.twig') ->context(['key' => 'value']); ?>

Пример

Давайте создадим письмо на основе HTML-шаблона и отправим его через MailerInterface:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\Mime\Address; use Symfony\Bridge\Twig\Mime\TemplatedEmail; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/send', name: 'article_send')] public function send(MailerInterface $mailer): Response { $email = (new TemplatedEmail()) ->from(new Address('sender@example.com', 'Sender')) ->to(new Address('recipient@example.com', 'Recipient')) ->subject('Welcome') ->htmlTemplate('email/welcome.html.twig') ->context([ 'name' => 'user', 'text' => 'abcde', ]); $mailer->send($email); return new Response('sent'); } } ?>

Шаблон письма может выглядеть так:

<p>Hello, {{ name }}!</p> <p>{{ text }}</p>

Результат выполнения кода:

"sent"

Пример

Давайте передадим в контекст несколько переменных разных типов и используем их в шаблоне:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\Mime\Address; use Symfony\Bridge\Twig\Mime\TemplatedEmail; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/send-list', name: 'article_send_list')] public function sendList(MailerInterface $mailer): Response { $email = (new TemplatedEmail()) ->from(new Address('sender@example.com', 'Sender')) ->to(new Address('recipient@example.com', 'Recipient')) ->subject('List') ->htmlTemplate('email/list.html.twig') ->context([ 'items' => ['a', 'b', 'c', 'd', 'e'], 'count' => 5, 'enabled' => true, ]); $mailer->send($email); return new Response('list sent'); } } ?>

Шаблон с циклом и условием:

<p>Count: {{ count }}</p> {% if enabled %} <ul> {% for item in items %} <li>{{ item }}</li> {% endfor %} </ul> {% endif %}

Результат выполнения кода:

"list sent"

Смотрите также

  • класс Email,
    который создаёт обычное письмо без шаблона
  • метод htmlTemplate,
    который задаёт HTML-шаблон письма
  • метод textTemplate,
    который задаёт текстовый шаблон письма
  • метод context,
    который передаёт переменные в шаблон
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить