我正试图通过我的应用程序清空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代码清除缓存吗?
编辑: 我实际上是因为我的路由系统而尝试重新生成缓存。我已经制作了一个包含symfony 2路径的捆绑包,并添加了为SEO目的重写它的可能性(例如:我有一个指向/ category的front_category路由,使用此捆绑包我可以将其重写为category-seo-optimized。 HTML)。
如果我在需要特定参数的路线上,例如ID,我需要为它做一个特殊的路线才能重写它。例如,对于/ category / 3我需要创建一个名为category_3和..的路由,为了让symfony知道我已经改变了路由系统,我必须清除缓存。
答案 0 :(得分:6)
我刚才遇到的问题完全相同。 对我来说最简单的解决方案是:
use Symfony\Component\Filesystem\Filesystem;
并在控制器中:
$fs = new Filesystem();
$fs->remove($this->container->getParameter('kernel.cache_dir'));
这将删除当前环境的缓存目录。
答案 1 :(得分:3)
这里已经回答了类似的问题:Symfony 2.4 execute Command from Controller - 3月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对象而不是服务,但它没有用。缓存清除操作可能需要很长时间才能加载,因此使用服务可能会做得更好。
最佳方法是在没有缓存清除的情况下解决您的问题。查找快速变化的实体,操作或您需要的任何内容,并禁用它们的缓存。 如果你发布一个详细的问题(并在评论中添加链接),为什么你需要忽略缓存和哪里,那么我可以帮助你找到另一种方式。