百度空间 | 百度首页 
 
查看文章
 
CakePHP View Cache的一个问题
2008-08-14 00:04
    最近一直在使用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其他设置方法不变,可以参考这里

类别:Php | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu