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其他设置方法不变,可以参考这里
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:星月浪子 来源: 那一剑的风情
- 标签: CakePHP
- 发布时间:2009-10-28 22:44:15
- [31] Go Reflect 性能
- [13] iTerm2 (Mac Terminal)
- [13] iOS可视化编程 Tips 之“无需代码设置
- [13] 基于HTTP缓存轻松实现客户端应用的离线支持
- [12] 公钥私钥加密解密数字证书数字签名详解
- [12] 系统工程师的自我修养- sed篇
- [11] 浅谈Web安全验证码
- [11] 正态分布的前世今生(一)
- [11] 界面设计速成
- [11] osx平台上lol英雄联盟launcher启