Symfony2 / Twig:如何强制重新呈现单个模板?

时间:2014-02-10 01:42:57

标签: php templates symfony twig

我有一个Symfony项目,它还会发送一些标准的电子邮件,例如“亲爱的用户XYZ,请查找附件”等等 - 这些电子邮件的内容存储在Twig-templates中,如yourfile.html.twig。管理员可以在简单的Web界面中更改那些基本上“文本文件”。任何更改都将写回文件。电子邮件与SwiftMailer一起发送,就像他们的文档中的示例代码一样,文件路径为twig模板。

这在调试环境中工作正常 - 因为Twig会自动重新呈现已更改的缓存文件。但是,当我在生产环境中时,这不再起作用了。 Twig无法识别对邮件模板所做的更改,并且它使用缓存版本(因此用户会收到包含旧版本文本的电子邮件)。

解决此问题的一种方法是每次管理员更改电子邮件模板时清除缓存(这不会经常发生)。无论如何,我不喜欢这种方式,因为它强制完全重新报道每一页,这只是浪费资源......

另一种可能性是在生产环境中启用Twig的“自动重新呈现”功能,但我再次对此解决方案不满意,因为它会导致性能下降......

执行此操作的“最佳”方法是调用某个函数来重新渲染这个已更改的文件(伪代码:twig-> rerender(“path / to / file / yourfile.html.twig”)) ),但我找不到任何方法来实现这一目标。也许我只是用错误的关键词进行搜索?

如果有人知道如何解决上述问题,我真的很感激!

提前致谢, katze_sonne

1 个答案:

答案 0 :(得分:0)

您可以将信件的文字存储在数据库中。例如,在树枝上,你将只有 {{letter}}。你的问题就会消失。我认为这种方式更有用。而且你不需要在项目文件夹中重写文件,在服务器上可能会遇到一些问题。

您可以从命令发送电子邮件的另一种变体。命令始终在 dev 环境中执行,因此它将获得文件的非缓存副本。如果您从控制器发送信件,则可以使用How can I run symfony 2 run command from controller