Opencart 3.x 缓存控制与 $this->request->get

Posted

技术标签:

【中文标题】Opencart 3.x 缓存控制与 $this->request->get【英文标题】:Opencart 3.x Cache-Control with $this->request->get 【发布时间】:2020-02-28 05:39:53 【问题描述】:

使用 Opencart 3.0.3.2 我开发了一个模块,它在 Opencart 的管理部分显示产品列表。 每个产品旁边都有一个按钮 - 按钮动作如下:

https://example.com/admin/index.php?route=extension/shipping/mymodule&user_token=W0nBWaeKPjpeHFSMb4QmCqmt3sW7hA6Z&product_id=422&active_tab=1&addfree

通过检查 $this->request->get['addfree'] 在控制器中获取 addfree。

问题在于缓存:

我在 2.3.0.2 安装和 3.0.3.2 安装中安装了相同的模块。两者都有几乎相同的 .htaccess 文件。

3.x 坚持使用 .htaccess 中指定的 Cache-Control: max-age=900 从磁盘缓存加载我上面的 URL

ExpiresByType text/html                             "access plus 15 minutes"

2.3.0.2 加载与Cache-Control: no-store, no-cache, must-revalidate相同的URL

我不知道为什么会这样。 任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

解决方案: As stated in this post by ADD Creative.

如果您想保持 .htaccess 保持原样,并为 text/html 内容设置缓存时间跨度,但还要禁用 OC 3.x 响应和重定向的缓存,您可以按照上面链接帖子中的说明进行操作。

对于我自己,作为 OC 扩展的开发者,我决定在这篇文章中使用选项 #3。

所以在为 OC 3.x 开发我的扩展时,我必须记住:

    在每个 $this->response->setOutput(...) 前面加上 :
$this->response->addHeader('Cache-Control: no-cache, no-store, must-revalidate'); $this->response->addHeader('Pragma: no-cache');
    AND 在每个 $this->response->redirect(...) 前面加上:
header("Cache-Control: no-cache, no-store, must-revalidate"); header("Pragma: no-cache");

通过这种方式,我绝对可以肯定,任何使用我的扩展程序的人都不会看到任何缓存,无论他们的 .htaccess 中有什么内容,我不会在这件事上遇到任何支持问题,我也不必问他们更改任何内容以使我的扩展程序在他们的系统上运行。

就是这样!

【讨论】:

以上是关于Opencart 3.x 缓存控制与 $this->request->get的主要内容,如果未能解决你的问题,请参考以下文章

刷新缓存后opencart 3.0仪表板错误500

php OpenCart清除缓存

opencart 编辑文章

OpenCart 将数组返回到 JSON 并传递给 jQuery

OpenCart主类别

Opencart 全类 ul li 树