我有一个Symfony项目,它还会发送一些标准的电子邮件,例如“亲爱的用户XYZ,请查找附件”等等 - 这些电子邮件的内容存储在Twig-templates中,如yourfile.html.twig。管理员可以在简单的Web界面中更改那些基本上“文本文件”。任何更改都将写回文件。电子邮件与SwiftMailer一起发送,就像他们的文档中的示例代码一样,文件路径为twig模板。
这在调试环境中工作正常 - 因为Twig会自动重新呈现已更改的缓存文件。但是,当我在生产环境中时,这不再起作用了。 Twig无法识别对邮件模板所做的更改,并且它使用缓存版本(因此用户会收到包含旧版本文本的电子邮件)。
解决此问题的一种方法是每次管理员更改电子邮件模板时清除缓存(这不会经常发生)。无论如何,我不喜欢这种方式,因为它强制完全重新报道每一页,这只是浪费资源......
另一种可能性是在生产环境中启用Twig的“自动重新呈现”功能,但我再次对此解决方案不满意,因为它会导致性能下降......
执行此操作的“最佳”方法是调用某个函数来重新渲染这个已更改的文件(伪代码:twig-> rerender(“path / to / file / yourfile.html.twig”)) ),但我找不到任何方法来实现这一目标。也许我只是用错误的关键词进行搜索?
如果有人知道如何解决上述问题,我真的很感激!
提前致谢, katze_sonne
答案 0 :(得分:0)
您可以将信件的文字存储在数据库中。例如,在树枝上,你将只有
{{letter}}
。你的问题就会消失。我认为这种方式更有用。而且你不需要在项目文件夹中重写文件,在服务器上可能会遇到一些问题。
您可以从命令发送电子邮件的另一种变体。命令始终在 dev 环境中执行,因此它将获得文件的非缓存副本。如果您从控制器发送信件,则可以使用How can I run symfony 2 run command from controller。