Symfony2: отключить кэш Twig



Я пытаюсь отключить кэш twig в режиме prod или заставить его перекомпилировать мои представления.



Я использую KnapLaps SnappyBundle для создания некоторых PDF-файлов (та же проблема возникает с DomPDF), и у меня есть динамический контент для визуализации.



Когда в режиме dev я могу изменить некоторый текст или даже некоторые свойства css, изменения вступают в силу немедленно.



Но в режиме prod мне нужно кэшировать: clear или rm-rf app / cache/prod / twig/*, чтобы увидеть изменения.



Я попробовал следующее параметры в моей конфигурации.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 будет динамичным, когда оно находится в производстве.



Обновление информации из комментариев:



Я заметил, что даже динамические переменные шаблона не обновлялись, поэтому один и тот же PDF-файл создавался снова и снова в производство, но не в разработке.



После очистки всех кэшей снова, эта проблема исправлена: PDF-файлы теперь генерируются с динамическим содержимым, как и было задумано.



Тем не менее, остается вопрос: что, если, когда мой сайт находится в производстве, я решу изменить стиль CSS внутри шаблона pdf ? CSS не является переменной шаблона, и я не могу заставить людей очистить свой кэш : /

732   2  

2 ответов:

На вопрос о кэшировании на стороне клиента есть несколько ответов.

Во-первых, HTTP использует некоторые заголовки, которые описывают клиенту, как сделать кэширование. Худший из них-объявить, что полученный ресурс должен считаться кэшируемым для следующего раза X без повторной проверки на обновления. Менее навязчивой версией является добавление заголовка с подписью доставленной версии или последней измененной меткой времени, и клиент должен каждый раз заново проверять, является ли ресурс все еще до настоящего времени, прежде чем использовать его.

Первый вид кэширования может быть обновлен только путем удаления клиентского кэша в браузере. Второй, вероятно, можно было бы обойти путем принудительной загрузки страницы снова (Ctrl-F5 или около того), но это действительно так же скрыто, как меню, позволяющее очистить кэш.

Чтобы обезопасить себя, обычный подход будет заключаться в добавлении тега, номера редакции, увеличенного счетчика или любого другого доступного элемента в строку запроса URL, используемого для этого ресурс.

  1. http://example.com/generated/summary.pdf?v=1234
  2. http://example.com/generated/summary.pdf?v=1235

Первый URL-адрес от запуска развертывания 1234, второй - от 1235 - это число изменяет URL-адрес достаточно, чтобы вызвать новый запрос вместо получения старой версии из кэша.

Я не знаю, есть ли что-то доступное в вашей системе, чтобы действовать подобным образом. Вы также можете всегда добавлять постоянно меняющееся значение, например текущая метка времени, чтобы избежать кэширования вообще, если вы не можете отключить заголовки кэширования HTTP.

Правильный способ отключить механизм кэширования Twig-установить параметр среды cache в false вместо каталога кэша:

# config_dev.yml
# ...
twig:
    cache: false

Ссылки:

Параметры Среды Веточки

Конфигурация TwigBundle

Comments

    Ничего не найдено.