【问题标题】:How do I completely disable caching in Cakephp?如何在 Cakephp 中完全禁用缓存?
【发布时间】:2011-02-09 16:18:26
【问题描述】:

所以我在我的 Cakephp 应用程序中打开了缓存闸门,现在我想关闭它们...

我已尽我所能:删除 tmp 文件夹中的所有文件(但不是文件夹),在我的应用程序的 core.php 文件中打开“Cache.disable”,尝试从在一些带有 clearCache() 和 Cache::clear() 的控制器中(但我怀疑这不起作用,因为它没有加载控制器——由于缓存)。

我几乎有效地停止了我的开发过程,只是因为缓存不会关闭。有人有一些我可以尝试的想法吗?我开始认为它可能在浏览器或我的托管服务中,但它可能只是 Cakephp 搞砸了我。

【问题讨论】:

  • 您是否尝试过清除浏览器缓存?另外,您如何评估它是否正在缓存您的应用程序?请记住,即使缓存关闭,/tmp/cache 中仍然会有文件,因为模型总是被缓存。
  • 我尝试评估它是否正在缓存的方法是在视图中插入一个 hi 并查看它是否在重新加载后出现,是的,清空浏览器缓存。作为旁注,我已经解决了问题,但现在我不知道如何处理它:视图缓存文件在我每次手动删除后都会重新出现......即使我有我可以找到的所有缓存功能都已禁用.为什么它仍然缓存视图?
  • 也许可以尝试在配置中设置 debug:0,因为我知道 debug:2 会在每个请求上重新生成所有内容。否则,也许该文件是只读的,或者您的 ftp 客户端没有正确报告该文件夹?只是一个想法:)

标签: php cakephp caching


【解决方案1】:

要排除浏览器缓存是根本原因,您可以尝试添加以下行:

header('Cache-Control: no-store, private, no-cache, must-revalidate');                  // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false);    // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');                                       // Date in the past  
header('Expires: 0', false); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Pragma: no-cache');

根据我的经验,所有这些缓存清除 HTTP 标头的组合适用于所有浏览器,并且还绕过了一些非常激进的缓存代理。

【讨论】:

  • 我在哪里可以添加这些代码行?提前致谢。
【解决方案2】:

您可以查看控制器代码中的某些元素缓存并将它们设置为 false。这适用于 app_controller.php 或 Controller/AppController.php,具体取决于您使用的 Cake 版本。

Controller::cacheAction = false

echo $this->element('latest_comments', array(), array('cache' => false));

您可以尝试在控制器操作中添加Controller::disableCache();

【讨论】:

  • 我觉得应该是echo $this->element('latest_comments',array(), array('cache' => false));
  • @RobSawyer 谢谢。更新了答案。
  • 公共 $cacheAction = false;用于 CakePHP 2 中的 AppController
【解决方案3】:

有点长镜头(加上这个线程很旧,但是哦),但我有一个类似的问题:我无法让 IE 退出缓存 ajax 请求(使用 jQuery)。在经历了很多心痛和头痛之后,一个简单的:

$.ajaxSetup({cache:false});

成功了。一定要爱上 IE...

【讨论】:

  • 如果有的话,这对 IE 来说是件好事。这是 jQuery,不是 Cake。
【解决方案4】:

我曾经遇到过模型被缓存并且不再反映表的架构的问题。

我必须更新我的 /config/core.php 并设置“debug:2” 这禁用了我的模型的缓存并解决了我的问题。

【讨论】:

【解决方案5】:

https://book.cakephp.org/3.0/en/core-libraries/caching.html#globally-enable-or-disable-cache

静态 Cake\Cache\Cache::disable¶ 在尝试找出与缓存过期相关的问题时,您可能需要禁用所有缓存读取和写入。你可以使用 enable() 和 disable() 来做到这一点:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    相关资源
    最近更新 更多