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

use*_*802 11 php caching symfony

我正试图通过我的应用程序清空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'));
Run Code Online (Sandbox Code Playgroud)

我也尝试rm -Rf过缓存文件夹.

他们都没有完全正常工作,因为我遇到了很多错误.以下错误是我正在解决方案2(这似乎是最好的):

无法启动会话:已由PHP启动(已设置$ _SESSION).

似乎Symfony正在尝试重建页面或在渲染过程中重新启动应用程序.

怎么会有人通过一些PHP代码清除缓存?

编辑:由于我的路由系统,我实际上正在尝试重新生成缓存.我已经制作了一个包含symfony 2路径的捆绑包并添加了为SEO目的重写它的可能性(例如:我有一个指向/ category的front_category路由,使用此捆绑包我可以将其重写为category-seo-optimized. HTML).

如果我在需要特定参数的路线上,例如ID,我需要为它做一个特殊的路线才能重写它.例如,对于/ category/3我需要创建一个名为category_3和..的路由,为了让symfony知道我已经改变了路由系统,我必须清除缓存.

Mar*_*der 8

我刚刚遇到的问题完全相同.对我来说最简单的解决方案是:

use Symfony\Component\Filesystem\Filesystem;
Run Code Online (Sandbox Code Playgroud)

在控制器中:

$fs = new Filesystem();
$fs->remove($this->container->getParameter('kernel.cache_dir'));
Run Code Online (Sandbox Code Playgroud)

这将删除当前环境的缓存目录.

  • 这将导致生产服务器停机. (3认同)