IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

CakePHP View Cache的一个问题

那一剑的风情 2009-10-28 22:44:15 累计浏览 2,256 次
本机暂存

    最近一直在使用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其他设置方法不变,可以参考这里

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 使用gettext来支持PHP的多语言 (累计阅读 39,267)
  2. WordPress插件开发 -- 在插件使用数据库存储数据 (累计阅读 29,163)
  3. Paypal接口详细代码(PHP版,非API接口) (累计阅读 19,407)
  4. 我的PHP,Python和Ruby之路 (累计阅读 13,146)
  5. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,788)
  6. 15个最好的免费开源电子商务平台 (累计阅读 12,540)
  7. Redis消息队列的若干实现方式 (累计阅读 12,087)
  8. 知乎技术方案初探 (累计阅读 12,070)
  9. 到底什么是MVC? (累计阅读 11,865)
  10. 整理了一份招PHP高级工程师的面试题 (累计阅读 11,708)