繁体   English   中英

以编程方式清除symfony 2上的缓存

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM