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