我想在发送电子邮件之前获得渲染。
我用htmlTemplate
和context
创建了一个TemplatedEmail
,它可以很好地发送,但如何获得生成的模板与上下文保存在数据库中?(客户需求)
我尝试了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());
字符串
我想使用render方法,但我在一个服务中,不确定这是否是一个存储在数据库中的好方法。
4条答案
按热度按时间daupos2t1#
Symfony仅在实际发送消息时通过Event Listener呈现消息。负责渲染的类是
BodyRenderer
,from the Twig Bridge。但是没有什么能阻止你自己呈现消息。
你有模板和上下文变量,所以你可以简单地在发送的任何地方注入Twig,将模板呈现为一个字符串,然后做任何你需要的事情。
您也可以注册自己的
MessageEvent::class
监听器,将其设置为比the one registered by the Twig Bundle低的优先级(它使用默认优先级),因此它会在the one registered by the Twig Bundle之后**执行,然后您可以访问消息体,因为它已经被呈现了。这(非常)稍微复杂一点,但是由于不需要两次渲染模板,因此可以获得一些性能。使用哪种方法取决于您的应用程序、约束等。但重要的是要意识到在这个过程的哪一部分你会发现身体实际上被渲染了,或者如果你想在那之前渲染它,你可以自己渲染。
vsdwdz232#
有关将来的信息,可以使用此处的文档在服务中呈现模板https://symfony.com/doc/current/templates.html#rendering-a-template-in-services
igetnqfo3#
下面是使用EventListener的解决方案(用于将模板化的电子邮件记录到DB,但可以轻松地自定义为其他任何内容)
字符串
67up9zun4#
受https://stackoverflow.com/a/58932244/1936720的启发,您还可以使用
字符串
这就是它的工作方式:
型