thinkphp 5.0 不支持传统静态页面缓存,其“静态缓存”实为数据库查询缓存或自定义响应缓存;关闭指定模块缓存需分别处理:禁用该模块内所有 cache() 调用、在页面级缓存中间件中排除模块路径、配置模板缓存关闭、或运行时切换为空缓存驱动。

ThinkPHP 5.0 不支持传统意义上的“静态缓存”(如 HTML 页面快照式缓存),它没有内置的全局静态页面生成机制。所谓“静态缓存”,在 TP5 中通常指两种情况:一是通过 cache() 方法对数据库查询结果做缓存;二是开发者自行用中间件或钩子实现的响应内容缓存(即页面级缓存)。要“关闭指定模块的缓存”,实际是指在该模块范围内禁用这些缓存行为。
关闭模块内数据库查询缓存
TP5 的模型查询支持链式调用 cache(),例如:
db('user')->cache('user_list', 3600)->select();
若想让某个模块(比如 admin)完全不走查询缓存,有以下方式:
- 在模块的公共文件(如
application/admin/common.php)中定义一个函数或常量,统一控制是否启用缓存 - 在控制器基类中重写查询逻辑,例如封装一个
uncachedDb()方法,内部调用时跳过cache() - 直接在模块所有查询语句中省略
cache()调用——这是最直接、最可控的方式
关闭模块对应的页面级缓存中间件
如果你使用了类似 PageCache 这类自定义中间件做响应缓存,它一般通过请求路径(如 Request::path())生成缓存键。要排除某个模块,只需在中间件逻辑中加判断:
if (stripos(Request::path(), '/admin/') === 0) {
return $next($request); // 直接放行,不缓存
}
也可以更规范地按模块名判断(需配合路由解析):
- 在中间件中获取当前模块名:
Route::getRule()->getModule()或从 URL 段提取 - 若模块名为
admin,则跳过缓存读写逻辑 - 确保该中间件仅注册在需要缓存的模块路由分组中,而非全局注册
禁用模块内所有缓存驱动调用
如果希望整个模块彻底脱离缓存系统(包括手动调用 Cache::get/set),可考虑运行时切换缓存类型:
- 在模块入口或控制器初始化方法中执行:
Cache::connect(['type' => 'file', 'path' => '/dev/null']);(Linux)或指向一个不可写目录,使缓存静默失效 - 更稳妥的做法是封装一个模块专属的缓存门面,在
admin模块中返回空实现 - 不推荐直接修改全局配置,因为会影响其他模块
检查并绕过模板缓存
TP5 的模板引擎默认开启缓存,编译后的模板文件存在 runtime/view/ 下。虽然这不是“数据缓存”,但可能被误认为静态缓存。关闭方式如下:
- 在模块配置文件(如
application/admin/config.php)中覆盖设置:'template' => ['cache' => false] - 或在应用配置中按模块条件动态设置(需在视图初始化前生效)
- 注意:这仅影响模板编译缓存,不影响数据或响应缓存
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











