我想从后端应用程序中的操作中清除前端应用程序的缓存。
我怎样才能做到这一点?
答案 0 :(得分:8)
我认为在symfony 1.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
答案 1 :(得分:4)
这对我有用。它从给定目录中删除所有缓存的文件:
$cache_dir = sfConfig::get('sf_cache_dir').'/'.$app.'/'.$env.'/';
$cache = new sfFileCache(array('cache_dir' => $cache_dir));
$cache->clean();
答案 2 :(得分:1)
如果有人正在寻找清除一个缓存项目(一页):
sfContext::switchTo('frontend');
sfContext::getInstance()->getViewCacheManager()->remove("module/action?¶m1=value1¶m2=value2","THE-DOMAIN-OF-YOUR-FRONTEND-APPLICATION-IF-U-USE-IT-IN-CACHE-KEYS");
sfContext::switchTo('backend');
答案 3 :(得分:0)
我不认为没有“干净”的方式来完成这项工作,因为不同的应用程序在symfony中被视为完全分离的环境。 显然,工作可能会以更少或更脏的方式完成,选择删除缓存/目录中任何文件的方式,运行phing任务 clear-cache(cc)等......
你可以简单地运行rm -rf cache / *,但你可以打破一些客户端请求。 更简单的方法是通过passthru()或exec()
运行 symfony cc答案 4 :(得分: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的源代码...