thinkphp 3.2 不支持直接关闭单个模块缓存,但可通过配置覆盖、运行时控制(如c('html_cache_on', false))、独立缓存路径及行为中间件等方式实现按模块禁用静态页面缓存、模板缓存和数据缓存。

ThinkPHP 3.2 不支持直接“关闭单个模块缓存”的全局配置项,但可以通过灵活组合缓存开关、运行时控制和静态缓存规则来实现**按模块或控制器粒度禁用缓存**的效果。关键在于区分两类缓存:静态页面缓存(HTML_CACHE)和数据/模板缓存(Runtime 文件缓存),它们的关闭方式不同。
一、关闭某模块的静态页面缓存(HTML_CACHE)
静态缓存由 HTML_CACHE_ON 控制,但它是全局开关。要让某个模块(如 Admin)不生成静态页,需在该模块的配置文件中覆盖规则,并配合运行时动态关闭:
- 在
Application/Admin/Conf/config.php中设置:
'HTML_CACHE_ON' => false, —— 这会仅对该模块生效(因为模块配置优先级高于主配置) - 若已开启全局静态缓存,也可在模块的控制器方法开头手动关闭:
$this->assign('_html_cache_on', false);(部分版本兼容)
更可靠写法是:C('HTML_CACHE_ON', false);—— 在 Action 方法第一行调用,确保后续display()不触发静态缓存生成
二、禁止某模块写入 Runtime 缓存文件(如模板编译、日志、数据缓存)
Runtime 目录下的缓存(Cache/、Temp/、Data/、Logs/)默认全模块共用。要“隔离”或“跳过”某模块,实际做法是不生成、不读取、不清理特定路径,而非真正关闭模块级开关:
-
模板缓存隔离:在模块配置中指定独立模板缓存路径,避免干扰
'TEMPLATE_CACHE_PATH' => './Application/Runtime/Temp/Admin/', -
日志不写入某模块:在 Admin 模块的基控制器
__construct()中临时关闭日志C('LOG_RECORD', false); -
数据缓存绕过:查询时不调用
cache(),或显式设为false$Model->cache(false)->select();
三、通过 URL 规则或行为中间件统一拦截(推荐进阶用法)
在 Application/Common/Conf/config.php 或行为定义中,添加一个 app_begin 行为,根据当前模块名自动关闭缓存:
- 新建行为文件
Application/Common/Behavior/NoCacheBehavior.class.php:class NoCacheBehavior { public function run(&$params) { if (MODULE_NAME === 'Admin') { C('HTML_CACHE_ON', false); C('TMPL_CACHE_ON', false); C('DATA_CACHE_ON', false); } } } - 在配置中注册:
'TAGGED_BEHAVIOR' => array('app_begin'=>'NoCacheBehavior'),
四、验证是否生效的小技巧
关闭后务必检查几个关键点:
- 访问目标模块页面,查看
Application/Runtime/Html/下是否仍生成对应 .html 文件 - 刷新页面后,
Application/Runtime/Cache/对应模块缓存文件夹是否不再更新时间戳 - 开启调试模式(
APP_DEBUG = true)时,Trace 面板中「缓存」栏目应显示「未启用」或「跳过」
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











