Zend Framework 2使转换器缓存无效

时间:2013-10-13 15:20:59

标签: zend-framework internationalization zend-framework2

我有这段代码:

'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使其无效?

例如,我知道翻译何时更改,所以我想按要求无效,但我还没有找到办法。

3 个答案:

答案 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,否则你将没有缓存。