Как перезагрузить Twig кеш в Symfony 2
У меня есть приложение, которое разработано на PHP с использованием фреймворка Symfony 2. Я изменил файл HTML, но это изменение не отражается при обновлении страницы.
-
Я перезапустил сервер. Неудачно.
-
Я попытался удалить папку Twig с самой страницы /protected/cache/
. Это не загрузка.
Как я могу перезагрузить кеш Twig?
Заметки:
- Я использую сервер Tomcat для развертывания.
- У меня нет настроенной командной строки Symfony 2 на сервере.
- Я новичок в PHP.
Ответы
Ответ 1
Самый простой способ: введите команду:
rm -rf app/cache/*
Точка: все файлы в app/cache/
могут быть удалены свободно, при необходимости они восстанавливаются.
Если вы действительно хотите очистить только твиг-кеш:
rm -rf app/cache/<environment>/twig
Замените <environment>
на dev
, prod
или test
в соответствии с вашими требованиями.
Ответ 2
При создании нового экземпляра Twig_Environment вы можете передать массив параметров в качестве второго аргумента конструктора. Один из них - auto_reload
. При разработке с помощью Twig полезно перекомпилировать шаблон при изменении исходного кода. Если вы не указали значение параметра auto_reload
, оно будет определено автоматически на основе значения debug
.
Установите auto_reload
как true
:
$twig = new Twig_Environment($loader, array('auto_reload' => true));
Документация Twig для разработчиков:
http://twig.sensiolabs.org/doc/api.html#environment-options
Ответ 3
У меня была аналогичная проблема, но удаление папки кеша не повлияло на мой шаблон, и я не знаю почему. Теперь, по-моему, проблема заключается в следующем коде в моем файле config_dev.yml:
twig:
cache: false
Возможно, это тоже решение для вас, так что вам не нужно постоянно использовать команду.
Литература:
Конфигурация TwigBundle
Параметры среды Twig
Ответ 4
Если вы используете opcache/другое подобное кэширование, удаление папки кэша twig не будет обновлять шаблоны, так как кэш-браузер будет состоять только из файлов .php.
Вам нужно удалить папку кэширования twig + выполнить php файл, который содержит:
opcache_reset();
Ответ 5
Вы должны внести некоторые изменения в файл app.php, расположенный в веб-папке.
Изменить:
$kernel = new AppKernel('prod', false);
в
$kernel = new AppKernel('prod', true);
и очистите кеш, если хотите.
Ответ 6
Если вы используете OPcache, обязательно закомментируйте opcache.validate_timestamps=0
в среде разработчика.
Ответ 7
Вы можете добавить такую функцию:
public function renderView($view, array $parameters = array())
{
$loader = new \Twig_Loader_Filesystem($this->container->getParameter("template_path"));
$twig = new \Twig_Environment($loader, array('auto_reload' => true,
'cache' => false
));
/////////////////////add a translate filter///////////////////////
$getTextdomain = new \Twig_SimpleFilter('trans',function ($string){
return $this->container->get('translator')->trans($string);
});
$twig->addFilter($getTextdomain);
//////////////////////////////////////////////////////////////////
///////////////////////////Add an extension twig//////////////////
$twig->addExtension(new Extension());
//////////////////////////////////////////////////////////////////
return $twig->render($view, $parameters);
}