2

我想在发送之前获得电子邮件的渲染。

我创建了一个TemplatedEmailwith htmlTemplateand context,它可以很好地发送,但是如何获取生成的带有上下文的模板以将其保存在数据库中?(客户的需求)

我试过了,getBody()但似乎只适用于我得到的文本模板A message must have a text or an HTML part or attachments.

$email = new TemplatedEmail();
$email->htmlTemplate($htmlTemplate);
$email->from($from)->to(...$to)->subject($subject);
$email->context($context);

dd($email->getBody());

我想使用渲染方法,但我在服务中,不确定它是否是存储在数据库中的好方法。

4

2 回答 2

2

Symfony 仅在实际发送消息时才通过Event Listener呈现消息。负责渲染的类BodyRenderer来自Twig Bridge

但是没有什么能阻止您自己呈现消息。

你有模板和上下文变量,所以你可以简单地在任何你进行发送的地方注入 Twig,将模板渲染成一个字符串,然后做任何你需要的事情。

您还可以注册自己的MessageEvent::class侦听器,将其设置为低于Twig Bundle 注册的优先级(它使用默认优先级),以便在该侦听器之后执行,然后您可以访问消息正文,因为它已经呈现. 这(非常)稍微复杂一些,但您会获得一些性能,因为您不会两次渲染模板。

使用哪种方法取决于您的应用程序、您的约束等。但重要的是要意识到您会在流程的哪个部分找到实际渲染的主体,或者如果您在此之前需要它自己渲染它。

于 2021-04-29T13:11:30.320 回答
0

有关将来的信息,可以使用此处的文档在服务中呈现模板https://symfony.com/doc/current/templates.html#rendering-a-template-in-services

于 2021-05-17T13:11:54.317 回答