Как перезагрузить кэш веток в symfony2
Я новичок в PHP, у меня есть приложение, разработанное на PHP и платформе symfony2. Я изменил html-файл, изменение не отражается при обновлении страницы.
01. I restarted the server No luck.
02. I tried to remove the twig folder from /protected/cache/ page it self not loading.
Пожалуйста, сообщите, я использую сервер tomcat для развертывания.
Примечание: У меня нет командной строки symfony2, настроенной на сервере.
7 answers
Самый простой способ, введите команду:
rm -rf app/cache/*
Суть в том, что все файлы в app/cache/
могут быть свободно удалены, они восстанавливаются при необходимости.
Если вы действительно хотите очистить только кэш веток:
rm -rf app/cache/<environment>/twig
Заменить <environment>
на dev
, prod
, или test
в соответствии с вашими требованиями.
При создании нового экземпляра 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
У меня была аналогичная проблема, но удаление папки кэша не оказало никакого влияния на мой шаблон, и я не знаю, почему. Что, кажется, решает мою проблему сейчас, так это следующий код в моем файле config_dev.yml:
twig:
cache: false
Возможно, это также решение для вас, так что вам не нужно использовать команду все время.
Ссылки:
Если вы используете opcache/другое подобное кэширование, удаление папки кэша twig не приведет к обновлению шаблонов, так как кэш twig состоит только из файлов.php. Вам нужно удалить папку кэша twig + выполнить php-файл, который содержит:
Opcache_reset();
Вам нужно внести некоторые изменения в app.php файл, расположенный в веб-папке.
Изменение:
$kernel = new AppKernel('prod', false);
Кому:
$kernel = new AppKernel('prod', true);
И очистите кэш, если хотите.
Вы можете добавить такую функцию:
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);
}
Если вы используете OPcache, обязательно закомментируйте opcache.validate_timestamps=0
в среде разработки.