[英]Programmatically clear cache on 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代码清除缓存?
编辑:由于我的路由系统,我实际上正在尝试重新生成缓存。 我已经制作了一个包含symfony 2路径的捆绑包并添加了为SEO目的重写它的可能性(例如:我有一个指向/ category的front_category路由,使用此捆绑包我可以将其重写为category-seo-optimized。 HTML)。
如果我在需要特定参数的路线上,例如ID,我需要为它做一个特殊的路线才能重写它。 例如,对于/ category / 3我需要创建一个名为category_3和..的路由,为了让symfony知道我已经改变了路由系统,我必须清除缓存。
我刚刚遇到的问题完全相同。 对我来说最简单的解决方案是:
use Symfony\Component\Filesystem\Filesystem;
在控制器中:
$fs = new Filesystem();
$fs->remove($this->container->getParameter('kernel.cache_dir'));
这将删除当前环境的缓存目录。
这里已经回答了类似的问题: Symfony 2.4执行来自控制器的命令 - 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对象而不是服务,但它没有工作。 缓存清除操作可能需要很长时间才能加载,因此使用服务可能会做得更好。
最好的方法是解决您的问题,没有缓存清除。 查找快速变化的实体,操作或您需要的任何内容,并禁用它们的缓存。 如果你发布一个详细的问题(并在评论中添加链接),为什么你需要忽略缓存和哪里,那么我可以帮助你找到另一种方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.