簡體   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