Программно очистить кеш на symfony 2

Я пытаюсь очистить кэш Symfony 2 через мое приложение так же, как если бы я делал php app/console cache:clear .

Я пробовал много разных решений, таких как:

 //solution 1 $process = new Process('php '.__DIR__.'/../../../../../app/console cache:clear'); $process->setTimeout(3600); $process->run(); //solution 2 $input = new StringInput(null); $output = new NullConfigurationOutput(); $command = new CacheClearCommand(); $command->setContainer($container); $command->run($input, $output); //solution 3 $container->get('cache_clearer')->clear($container->getParameter('kernel.cache_dir')); 

Я также попытался установить rm -Rf в папку кэша.

Ни один из них не работает полностью, так как я получаю много ошибок. Следующая ошибка – это то, что я получаю на решении 2 (что показалось лучшим):

Не удалось запустить сеанс: уже запущен PHP (устанавливается $ _SESSION).

Похоже, что Symfony пытается перестроить страницу или перезагрузить приложение во время процесса рендеринга.

Как кто-то может очистить кеш через некоторый php-код?

EDIT: Я на самом деле пытаюсь восстановить кеш из-за моей системы маршрутизации. Я сделал пакет, который берет маршрут symfony 2 и добавляет возможность переписать его для цели SEO (например: у меня есть маршрут front_category, который указывает на / категорию, с этим пакетом я могу переписать его в категорию-оптимизированный для seo-оптимизации. HTML).

Если я на маршруте, который нуждается в определенном параметре, таком как идентификатор, мне нужно сделать для него специальный маршрут, чтобы переписать его. Например, для / category / 3 мне нужно создать маршрут с именем category_3 и .., чтобы Symfony знал, что я изменил систему маршрутизации, мне пришлось очистить кеш.

Точно такая же проблема, что и у меня. Самое простое решение для меня было:

 use Symfony\Component\Filesystem\Filesystem; 

и в контроллере:

 $fs = new Filesystem(); $fs->remove($this->container->getParameter('kernel.cache_dir')); 

Это приведет к удалению каталога кэша для текущей среды.

На подобный вопрос уже ответили: Symfony 2.4 выполняет команду от Controller, – ответил 20 марта в 15:37 pomaxa.

Я проверил и расширил код pomaxa :

Код контроллера

 use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Output\ConsoleOutput; $command = $this->container->get('yourservice.cache.clear'); //$dynamicEnvMode = $this->container->getParameter('kernel.environment') $staticEnvMode = 'dev'; // to use develop mode $staticEnvMode = 'prod --no-debug'; // to use production mode $input = new ArgvInput(array('--env=' . $staticEnvMode )); $output = new ConsoleOutput(); $command->run($input, $output); 

Я использовал статический режим среды, и я попытался использовать объект CacheClearCommand вместо службы, но он не сработал. Операция очистки кеша может использовать длительное время для загрузки, поэтому использование службы может сделать это лучше.

Лучший способ – решить вашу проблему без очистки кеша. Найдите быстро меняющиеся объекты, действия или все, что вам нужно, и отключите кеширование для них. Если вы публикуете подробный вопрос (и помещаете ссылку в комментарии), почему вам нужно игнорировать кеш и где, то я мог бы помочь вам найти другой способ.