2014-02-10 59 views
1

我有一個Symfony項目,它還發送一些標準的電子郵件,如「親愛的用戶XYZ,請找到附件」等 - 這些電子郵件的內容存儲在Twig模板,如yourfile.html.twig。管理員可以通過簡單的網絡界面來改變這些基本的「文本文件」。任何更改都會寫回文件。這些電子郵件與SwiftMailer一起發送,就像他們的文檔中的示例代碼中的文件路徑與樹枝模板一樣。Symfony2/Twig:如何強制重新渲染單個模板?

這在調試環境中正常工作 - 因爲Twig會自動重新發送已更改的緩存文件。但是,當我在生產環境中時,這不再起作用。對郵件模板所做的更改無法被Twig識別,並且它使用緩存版本(因此用戶會收到一封包含舊版本文本的電子郵件)。

解決此問題的一種方法是每次管理員更改電子郵件模板時清除緩存(這不會經常發生)。無論如何,我不喜歡這種方式,因爲它迫使每一頁的完全重投,這只是浪費資源...

另一種可能性是在生產環境中啓用Twig的「自動重新渲染」功能,但我對此解決方案再次感到不滿,因爲它會導致性能損失...

這樣做的「最佳」方法是調用某個函數來重新渲染這一個已更改的文件(僞代碼:twig-> rerender(「path/to/file/yourfile.html.twig」)),但我找不到任何方法來完成此操作。也許我只是使用了錯誤的關鍵字進行搜索?

我真的很感激,如果有人有如何解決上述問題的想法!

由於提前, katze_sonne

+0

一個這樣的例子可以在這裏找到http://stackoverflow.com/questions/14234464/disable-twig-compilation-cache-for-a-particular-template – Giovanni

回答

0

可以存儲在數據庫中的字母文本。例如,樹枝上只有 {{letter}}。你的問題就會消失。我認爲這種方式更有用。而且你不需要在項目文件夾中重寫文件,在服務器上可能會遇到一些問題。

您可以從命令發送電子郵件的另一種變體。命令始終在dev環境中執行,因此它將獲得文件的非緩存副本。如果您從控制器發送信函,則可以使用How can I run symfony 2 run command from controller

+0

感謝您的建議。我會盡力明天實施。我認爲如果我將文本存儲在文本文件中而不是存儲在數據庫中,沒有什麼區別,所以我會首先嚐試這種方式(我不想改變太多)。 現在我只是想知道如何處理替換。例如。我在電子郵件模板中使用了小枝變量「{{username}}」。但可能PHP的一個簡單的str_replace將幫助在這裏... 也發現這個關鍵字「數據庫」,這可能導致目標:http://twig.sensiolabs.org/doc/recipes.html#using -a-database-to-store-templates 謝謝! – mozzbozz