【发布时间】:2009-08-25 11:22:19
【问题描述】:
我想从后端应用程序中的操作清除前端应用程序的缓存。
我怎样才能做到这一点?
【问题讨论】:
我想从后端应用程序中的操作清除前端应用程序的缓存。
我怎样才能做到这一点?
【问题讨论】:
我相信在 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
【讨论】:
这对我有用。它从给定目录中删除所有缓存的文件:
$cache_dir = sfConfig::get('sf_cache_dir').'/'.$app.'/'.$env.'/';
$cache = new sfFileCache(array('cache_dir' => $cache_dir));
$cache->clean();
【讨论】:
如果有人正在寻找清除一个缓存项(一页):
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');
【讨论】:
我不认为没有“干净”的方式来完成这项工作,因为不同的应用程序在 symfony 中被视为完全独立的环境。 显然,这项工作可能会以一种更少或更脏的方式完成,选择你的方式来删除缓存/目录中的任何文件,运行 phing 任务 clear-cache (cc) 等...
您可以简单地运行 rm -rf cache/*,但您可能会中断一些客户端请求。 更简单的方法是通过 passthru() 或 exec()
运行 symfony cc【讨论】:
您可以创建 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 的源代码...
【讨论】: