我有这段代码:
'translator' => array(
...
'cache' => array(
'adapter' => array(
'name' => 'Filesystem',
'options' => array(
'cache_dir' => __DIR__ . '/../../../data/cache',
'ttl' => '3600'
)
),
'plugins' => array(
array(
'name' => 'serializer',
'options' => array()
),
'exception_handler' => array(
'throw_exceptions' => true
)
)
)
问题是,我如何通过TTL使其无效?
例如,我知道翻译何时更改,所以我想按要求无效,但我还没有找到办法。
答案 0 :(得分:1)
转换程序组件不使用TaggableInterface
,因此您必须知道转换程序生成的cacheId,以清除存储适配器中的项目。您可以使用以下代码生成相同的ID并删除该项。从您的服务或某个事件监听器中调用此方法。
$translator = $sm->get('McvTranslator');
$textDomain = 'default';
$locale = 'en';
$cacheId = 'Zend_I18n_Translator_Messages_' . md5($textDomain . $locale);
$translator->getCache()->removeItem($cacheId);
答案 1 :(得分:0)
我认为你可以设置Ttl = 0(总是),当缓存(文件)不再有效时 - 删除它。
答案 2 :(得分:0)
另一种方法:
在代码中找到您致电addTranslation
的点。
例如:
$translate = Zend_Registry::get('Zend_Translate');
$translate->addTranslation(array(
'content' => "$dir/$locale.mo",
'locale' => $locale
));
更改addTranslation
功能以添加reload => true
,如下所示:
$translate->addTranslation(array(
'content' => "$dir/$locale.mo",
'locale' => $locale,
'reload' => true
));
刷新页面。
瞧。
记得在此之后删除reload
,否则你将没有缓存。