Метод context класса TemplatedEmail
Метод context класса TemplatedEmail
задаёт массив переменных, которые будут доступны
внутри Twig-шаблона письма. Первым параметром
передаётся ассоциативный массив с данными.
Метод возвращает текущий объект письма, что
позволяет выстраивать цепочку вызовов.
Синтаксис
public function context(array $context): static
Пример
Давайте создадим письмо и передадим в шаблон
переменную name:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMimeEmailEmail;
use SymfonyComponentMimeEmailTemplatedEmail;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$email = (new TemplatedEmail())
->from('sender@example.com')
->to('recipient@example.com')
->subject('Hello')
->htmlTemplate('email/article.html.twig')
->context([
'name' => 'abcde',
]);
return new Response('email created');
}
}
?>
Теперь переменная name доступна в шаблоне:
<p>Hello, {{ name }}!</p>
Результат выполнения кода:
<p>Hello, abcde!</p>
Пример
Давайте передадим в шаблон несколько переменных разных типов:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMimeEmailTemplatedEmail;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$email = (new TemplatedEmail())
->from('sender@example.com')
->to('recipient@example.com')
->subject('Article')
->htmlTemplate('email/article.html.twig')
->context([
'title' => 'article',
'items' => ['a', 'b', 'c', 'd', 'e'],
'count' => 5,
]);
return new Response('email created');
}
}
?>
Выведем эти переменные в шаблоне:
<h1>{{ title }}</h1>
<p>Count: {{ count }}</p>
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
Результат выполнения кода:
<h1>article</h1>
<p>Count: 5</p>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
</ul>
Пример
Давайте используем метод context вместе
с методом textTemplate для текстовой версии
письма:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentMimeEmailTemplatedEmail;
use SymfonyComponentRoutingAttributeRoute;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$email = (new TemplatedEmail())
->from('sender@example.com')
->to('recipient@example.com')
->subject('Hello')
->htmlTemplate('email/article.html.twig')
->textTemplate('email/article.txt.twig')
->context([
'name' => 'user',
]);
return new Response('email created');
}
}
?>
Переменная name будет доступна в обоих шаблонах:
Hello, {{ name }}!
Результат выполнения кода:
"Hello, user!"
Смотрите также
-
класс
TemplatedEmail,
который создаёт письмо на основе Twig-шаблона -
метод
htmlTemplate,
который задаёт HTML-шаблон письма -
метод
textTemplate,
который задаёт текстовый шаблон письма -
метод
getContext,
который возвращает массив переменных шаблона