2013-01-20 56 views
1

也許我現在只是不完全理解文檔,但是有沒有辦法設置唯一的標識符,這樣我的緩存轉換就不會被覆蓋?APC高速緩存適配器 - 獨特?

每個域具有相同的名稱空間。

這裏是我迄今爲止在我module.config.php

'translator' => array(
    'locale'     => 'en', 
    'translation_file_patterns' => array(
     array(
      'type'  => 'gettext', 
      'base_dir' => __DIR__ . '/../language', 
      'pattern'  => '%s.mo', 
      'text_domain' => 'ftp' 
     ) 
    ), 
    'cache' => \Zend\Cache\StorageFactory::factory(array(
     'adapter' => 'apc', 
     'plugins' => array(
      'exception_handler' => array(
       'throw_exceptions' => false 
      ) 
     ) 
    )) 
) 

現在,我已經在同一臺機器上,並在每個虛擬主機運行兩個阿帕奇VirtualHosts我有一個名爲的FTP模塊,並且每個那些模塊使用ftp text_domain來翻譯他們自己的翻譯。

比方說,我有一個名爲translate_this_text的翻譯鍵,它在兩個域上都使用。

在domain1.com它會讀,Test1的 上domain2.com它會讀,Test2的

如果我訪問domain1.com文本轉換爲Test1的 如果我訪問domain2.com文本翻譯Test1,但這應該是Test2

如果我清除APC緩存並訪問domain2.com,那麼翻譯顯示Test2,但如果我訪問domain1.com它顯示Test2。

我希望這不是太混亂。

那麼最後是否有辦法在每臺主機上設置某種類型的唯一標識符,以便它們不會相互覆蓋,因爲它們現在存在於同一臺機器上?

回答

2

由陣列替換adapter值,以便你可以注入選項加入到APC適配器:

'translator' => array(
    'cache' => \Zend\Cache\StorageFactory::factory(array(
     'adapter' => array(
      'name' => 'apc', 
      'options' => array(
       'namespace' => 'foo_bar', 
      ), 
     ), 
     'plugins' => array(
      'exception_handler' => array(
       'throw_exceptions' => false 
      ) 
     ) 
    )) 
) 

我會寫上面的配置沒有namespace關鍵在全局文件,然後你config.local.php添加此規則:

$cache_namespace = 'foo_bar'; 

'translator' => array(
    'cache' => \Zend\Cache\StorageFactory::factory(array(
     'adapter' => array(
      'options' => array(
       'namespace' => $cache_namespace, 
      ), 
     ), 
    )) 
) 

對於每個應用程序,只需編輯本地配置文件並共享全局緩存選項即可。