CakePHP View Cache的一個問題

最近一直在使用CakePHP,感覺挺不錯。不過這幾天在使用View Cache的時候卻發現一個問題:URL帶查詢參數時總是不命中緩存。查看代碼後發現問題所在,原來在View中使用CacheHelper類來處理緩存,每次保存緩存時採用的文件路徑是:
$cache = convertSlash($this->here); //這裏採用$this->here,$this->here是app/config/routes.php裏配置的路徑,不帶查詢參數的。
$cache = $cache . '.php';
return cache('views' . DS . $cache, $file, $timestamp); //$file和之後的參數不用管。
這段代碼節選自CacheHelper中的cache函數

而在cake/bootstrap.php中,獲取緩存文件路徑的計算方法是:
$uri = setUri(); //這裏採用的是setUri(),與上面計算緩存文件路徑的方法是不一樣的
$filename=CACHE . 'views' . DS . convertSlash($uri) . '.php';
這段代碼節選自cake/bootstrap.php

爲了讓Cake支持帶查詢參數url的緩存,把CacheHelper中cache函數計算緩存文件路徑的代碼作如下修改:
$cache = convertSlash($this->here);
=>
$cache = str_replace("?","_",convertSlash(setUri()));
把cake/bootstrap.php計算緩存文件路徑的代碼作如下修改:
$filename=CACHE . 'views' . DS . convertSlash($uri) . '.php';
=>
$filename=CACHE . 'views' . DS . str_replace("?","_",convertSlash($uri)) . '.php';

View Cache其他設置方法不變,可以參考[url]http://www.cnblogs.com/confach/articles/577365.html[/url]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章