2009-08-25 54 views

回答

8

我相信symfony1.2版本做到這一點的正確方法如下:

sfContext::switchTo('frontend'); //switch to the environment you wish to clear 
sfContext::getInstance()->getViewCacheManager()->getCache()->clean(sfCache::ALL); 
sfContext::switchTo('backend'); //switch back to the environment you started from 
0

我不認爲沒有「乾淨」的方式來完成這項工作,因爲不同的應用程序在symfony中被視爲相當分離的環境。 顯然,工作可以在較少或較髒的方式進行,選擇用自己的方式刪除緩存/目錄的任何文件,運行phing任務明確的緩存(CC)等等

可以只需運行rm -rf cache/*,但可能會破壞某些客戶端請求。 比較簡單的事情可能是通過passthru()exec()

4

這對我的作品來運行symfony的CC。它會從指定目錄中的所有緩存文件:

$cache_dir = sfConfig::get('sf_cache_dir').'/'.$app.'/'.$env.'/'; 

$cache = new sfFileCache(array('cache_dir' => $cache_dir)); 
$cache->clean(); 
0

可以sfTask的創建實例,像這樣(在SF 1.2)運行:

$task = new sfCacheClearTask(sfContext::getInstance()->getEventDispatcher(), new sfFormatter()); 

    $arguments = array(); 

    // type can be one of: i18n, routing, template, module, config 
    $options = array(
     'frontend' => 'app', 
     'routing' => 'type', 
     'prod'  => 'env', 
    ); 

    $task->run($arguments, $options); 

對於所有可能的參數和選項看源代碼適當sfTask的...

1

如果有人正在尋找清除一個緩存項目(一頁):

sfContext::switchTo('frontend'); 
sfContext::getInstance()->getViewCacheManager()->remove("module/action?&param1=value1&param2=value2","THE-DOMAIN-OF-YOUR-FRONTEND-APPLICATION-IF-U-USE-IT-IN-CACHE-KEYS"); 
sfContext::switchTo('backend');