CacheHelper以不同名称保存相同的缓存文件

问题描述:

我遇到了CakePHP(2.3)CacheHelper的问题。 这真是一个强大的工具,但它不适合我在做什么。CacheHelper以不同名称保存相同的缓存文件

我有一个国际化的网站,该语言可以由用户的偏好设置,也可以通过URL参数(lang:xx)“强制”来设置。

因此,缓存页面“controller/action/yy”可以与“controller/action/yy/lang:xx”相同的页面。最糟糕的是,“控制器/动作/ YY”可以用英语,法语或其他任何语言进行缓存。

有没有办法改变缓存文件的名称(这里的前缀显然不是解决方案)(这样“controller/action/yy”将总是被缓存为“controller/action/yy/lang: xx“通过添加用户的偏好语言)?

在此先感谢! 塞巴斯蒂安

你可以在你beforeRender更改文件的前缀:

Configure::write('Cache.viewPrefix', 'YOURPREFIX'); 

而且你可以从params中,会话(取决于您的应用程序)的前缀。 我没有得到为什么前缀无用。每个页面的每种语言都会有一个文件。像“eng_my_action”文件。 如果您只想保存1个文件并将其与用户语言翻译成无意义的文件。因为视图已经这样做(只有数据的解析器)。

字体:

http://book.cakephp.org/2.0/en/core-libraries/helpers/cache.html#using-the-helper

好吧,我 会品尝到你了解awnser(2.3版本中寻找新):

public function beforeRender(){ 
    $lang = isset($this->params["named"]["lang"]) ? $this->params["named"]["lang"] : "eng"; // verify if is the default language(eng) or is in params 
    if($this->Auth->user("lang")){ 
     $lang = $this->Auth->user("lang"); // This is a example how to take the default language from a user. You need to change it to your app. 
    } 
    Configure::write('Cache.viewPrefix', $lang); 
} 
+0

你误解了我的问题,我不知道询问“如何以不同的名字缓存相同的文件”,但却排除了“如何不使用不同的名字缓存相同的文件”。因此,如果语言偏好为“english”,如何在“controller/action/yy/lang:en”下缓存请求的URL“controller/action/yy”。所以它不会将相同的文件保存在两个不同的文件下。 – 2013-05-02 09:03:14

+0

我给你添加了一个完整的例子来了解如何设置默认语言。我没有明白你为什么选中“无用”。无论如何,我认为这个例子会对你有用。 – Scoup 2013-05-02 14:02:32

+0

不,实际上,这是行不通的。我不知道如何更好地解释它... 如果未设置命名参数,则会有另一个文件保存在缓存中,因为“controller/action/yy”不匹配“controller/action/yy /郎咸平:XX”。所以会有两个相同的缓存文件:“controller_action_yy”和“controller_action_yy_lang_xx”。前缀并没有解决任何问题! – 2013-05-02 14:13:01