【发布时间】:2013-09-23 21:08:12
【问题描述】:
我正在尝试在 prod 模式下禁用 twig 缓存,或者强制它重新编译我的视图。
我正在使用 KnapLaps SnappyBundle 生成一些 PDF(DomPDF 也会出现同样的问题),并且我有动态内容要呈现。
在开发模式下,我可以修改一些文本,甚至是一些css属性,修改后立即生效。
但在 prod 模式下,我需要 cache:clear 或 rm -rf app/cache/prod/twig/* 来查看更改。
我在 Twig 部分的 config.yml 中尝试了以下选项(不是同时)
cache: "/dev/null"
cache: false
auto-reload: ~
在生成和重新渲染我的 pdf 时,我还尝试了一些带有标题的东西:
$html = $this->renderView("xxxxPdfBundle:Pdf:test.html.twig", array("foo" => $bar));
return new Response(
$this->get('knp_snappy.pdf')->getOutputFromHtml($html),
200,
array(
'Cache-Control' => 'no-cache, must-revalidate, post-check=0, pre-check=0',
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'attachment; filename='.$file
)
);
我不知道如何强制 twig 重新编译或不使用应用程序/缓存,因为显然 pdf 内容在生产时将是动态的。
来自 cmets 的信息更新:
我发现即使是动态模板变量也没有更新,因此在生产中一遍又一遍地生成相同的 PDF,但在开发中却没有。
再次清除所有缓存后,该问题已得到解决:现在生成的 PDF 中包含设计的动态内容。
仍然存在一个问题:如果在我的网站投入生产时,我决定更改 pdf 模板中的 CSS 样式怎么办? CSS 不是模板变量,我不能强迫人们清空缓存:/
【问题讨论】:
-
您是否检查过模板中应该是动态的部分(即模板变量)在生产中启用缓存时没有更改?我相信在生产中不一遍又一遍地编译模板,并且在部署新版本时清除缓存是一个想要的功能,因为性能。
-
@Sven 动态部分(我使用例如 {{ foo.name }} )不会在生产中生成的 pdf 中更新,除非我清除缓存:/ 在开发模式下,{{ foo.name }} 在每个 pdf 文件中都很好地显示和更新,无需清除缓存...
-
你在用这个twig-cache-extension - 我从一些问题和cmets的印象是Twig本身不会保留曾经生成的结果,那么你遇到这种情况的原因是什么?
-
好吧,我的错,我手动清除了整个缓存目录,现在模板变量在每个 pdf 生成时都很好地呈现。尽管如此,一个问题仍然存在:如果我的网站在生产中,我决定更改 pdf 模板中的 CSS 样式怎么办? CSS 不是模板变量,我不能强迫人们清空他们的缓存:/
-
我已将您的信息添加到您的问题中。
标签: php caching symfony pdf twig