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

时间:2013-05-01 08:36:47

标签: cakephp caching cakephp-2.0

我遇到了CakePHP(2.3)CacheHelper的麻烦。 这实际上是一个强大的工具,但它并不适合我正在做的事情。

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

因此,缓存页面“controller / action / yy”可以与“controller / action / yy / lang:xx”相同。最糟糕的是,“controller / action / yy”可以用英语,法语或其他方式缓存。

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

提前致谢! 塞巴斯蒂安

1 个答案:

答案 0 :(得分:0)

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

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

你可以从params或session获取你的前缀(取决于你的app)。 我不明白为什么前缀没用。每个页面的每种语言都有一个文件。像“eng_my_action”文件之类的东西。 如果您只想保存1个文件并使用用户语言翻译它是没有意义的。因为视图已经这样做了(只有数据的解析器)。

字体:

http://book.cakephp.org/2.0/en/core-libraries/helpers/cache.html#using-the-helper(在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);
}