我有一个多语言网站(文化取决于主机网址,例如:uk.site.com,fr.site.com等)。我在前端缓存部分并设置其缓存键。然后从模型中我做了类似的事情:
$cacheManager = sfContext::getInstance()->getViewCacheManager();
$cacheUri = $cacheManager->getPartialUri($module, $action, $cacheKey);
$cacheManager->remove($cacheUri, *); //second param is to clear this cache for all hosts
// $cacheManager->remove($cacheUri); when is like that it works for fine but only for the domain it's been called from.
上面的代码调用了sf核心方法sfMemCache->removePattern($pattern)
,它具有:
$regexp = self::patternToRegexp($this->getOption('prefix').$pattern);
foreach ($this->getCacheInfo() as $key)
{
if (preg_match($regexp, $key))
{
$this->remove(substr($key, strlen($this->getOption('prefix'))));
}
}
和$this->getCacheInfo()
始终为空,无法清除任何内容。
alawys抛出“要使用”removePattern“方法,必须将”storeCacheInfo“选项设置为”true“。”例外。我无法找到cacheInfos()必须填充的位置或它的角色究竟是什么。
我的questin的简化版本是:“为什么$ this-> getCacheInfo为空”
答案 0 :(得分:1)
如果removePattern方法抛出该错误,则在factories.yml配置中未正确配置memcached。
您想要的答案将在this page的标题' Alternative Caching storage'
标题下讨论您需要正确设置类和参数才能使用removePattern方法。例如:
view_cache:
class: sfMemcacheCache
param:
host: localhost
port: 11211
persistent: true
storeCacheInfo: true
您还需要确保memcached守护程序可以运行。如果memcached与其默认配置中的脚本在同一主机上运行,则上述设置应该没问题。如果您在单独的主机上运行memcached,或者您有多个主机共享一个memcached服务,那么您必须确保您的主机,端口和防火墙设置适合您的环境。