Подтвердить что ты не робот

Как перезагрузить Twig кеш в Symfony 2

У меня есть приложение, которое разработано на PHP с использованием фреймворка Symfony 2. Я изменил файл HTML, но это изменение не отражается при обновлении страницы.

  1. Я перезапустил сервер. Неудачно.

  2. Я попытался удалить папку Twig с самой страницы /protected/cache/. Это не загрузка.

Как я могу перезагрузить кеш Twig?

Заметки:

  • Я использую сервер Tomcat для развертывания.
  • У меня нет настроенной командной строки Symfony 2 на сервере.
  • Я новичок в PHP.
4b9b3361

Ответ 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);
}