我遇到电子邮件和扩展模板的问题。我正在尝试为电子邮件构建一个模板,然后在不同的Bundles中使用一个模板来存储电子邮件。我自己的捆绑我成功实现了这一点,但当我尝试扩展FosUserBundle时出现问题:重置电子邮件。
我的模板位于app / Resources / views / email_base.html.twig
{% block subject %}{% endblock subject %}
<div dir="ltr" style="display: block; width: 100%; background: #ffffff">
<div class="gmail_quote">
<div style="margin:0;padding:20px 0; background: #ffffff">
<table align="center" bgcolor="#F9F9F9" cellpadding="0" width="600" style="border-spacing:20px 0;color:#4d4d4d;font-family:Arial,Helvetica">
<tbody>
TROLLOLOLL
{% block body_html %}
{% endblock body_html %}
</tbody>
</table>
<table align="center" bgcolor="#FFFFFF" width="600" style="margin-top:12px;color:#bdbdbd;font-family:Arial,Helvetica;font-size:11px;text-align:justify">
<tbody>
<tr>
<td colspan="4" style="padding-top:10px">
This e-mail is intended solely for the addressee, may contain proprietary and legally privileged information.
If you have received this e-mail by mistake please notify the sender and delete this e-mail along with all attachments.
Thank you.
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
我尝试使用我的模板扩展的电子邮件位于UserBundle / Resources / views / Resetting / resetting_email.html.twig,如下所示:
{% extends '::email_base.html.twig' %}
{% block subject %}Resetting password
{% endblock %}
{% block body_html %}
<tr>
<td colspan=2 style="text-align: left;">
<h3>Witaj {{ user.username }}</h3>
</td>
</tr>
<tr>
<td colspan=2>
<p>Jeśli chcesz zresetować hasło, kliknij w następujący link <a style="color: #EA2227; text-decoration: underline" href="{{ confirmationUrl }}">reset hasła</a>.</p>
</td>
</tr>
{% endblock body_html %}
问题在于,当我发送此消息时,我只能看到resetting_email.html.twig中的内容。并且根本没有来自base_email.html.twig的内容。
在我的配置文件中,我为我的文件resetting_email.html.twig设置了重置模板:
fos_user:
db_driver: orm
firewall_name: main
user_class: GL\UserBundle\Entity\User
from_email:
address: development@##########.pl
sender_name: Admin ##########
resetting:
email:
template: GLUserBundle:Resetting:resetting_email.html.twig
service:
mailer: fos_user.mailer.twig_swift
答案 0 :(得分:2)
您必须将电子邮件附加到一个区块中才能呈现。
让我们来看看FOSUSerBundle Twig mailer class:
protected function sendMessage($templateName, $context, $fromEmail, $toEmail)
{
$template = $this->twig->loadTemplate($templateName);
$subject = $template->renderBlock('subject', $context);
$textBody = $template->renderBlock('body_text', $context);
$htmlBody = $template->renderBlock('body_html', $context);
$message = \Swift_Message::newInstance()
->setSubject($subject)
->setFrom($fromEmail)
->setTo($toEmail);
if (!empty($htmlBody)) {
$message->setBody($htmlBody, 'text/html')
->addPart($textBody, 'text/plain');
} else {
$message->setBody($textBody);
}
$this->mailer->send($message);
}
这些行是解决问题的关键:
$subject = $template->renderBlock('subject', $context);
$htmlBody = $template->renderBlock('body_html', $context);
模板不会像整体一样呈现,就像我们在控制器渲染的典型模板中所习惯的那样。它将逐块呈现,这是一个很酷且有趣的技巧。
因此,要使您的电子邮件正常工作,您必须重新定义 body_html 块,才能正确呈现
{% block body_html %}
<div dir="ltr" style="display: block; width: 100%; background: #ffffff">
...
</div>
{% endblock body_html %}
答案 1 :(得分:2)
我遇到了同样的问题,我需要使用基本邮件模板。
在{% block body_html %}
块内部,我使用精美的树枝命令embed嵌入了基本模板。这允许我使用我的模板作为布局(如extends
do)和适当的块。
{% block body_html %}
{% embed '@MyCompany/Mails/Grouped/base.html.twig' %}
{% set header = "some variable defined in the template" %}
{% block content %}
Confirm your email bla-blah-blah
{% endblock %}
{% endembed %}
{% endblock %}