2013-05-01 153 views
0

我遇到了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「通過添加用戶的偏好語言)?

在此先感謝! 塞巴斯蒂安

回答

0

你可以在你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

相關問題