必须执行composer update topthink/framework --with-dependencies并清缓存,因为只更新框架会导致think-orm、think-filesystem等强耦合扩展版本错配,引发SQL错误、方法缺失等问题;且TP8运行时缓存(runtime/)不清理会劫持新逻辑,使版本显示正常但实际仍运行旧代码。

不需要重新安装扩展包,但必须执行 composer update topthink/framework --with-dependencies 并清除缓存。
为什么不能只跑 composer update topthink/framework
ThinkPHP 8.0.x 系列(如 8.0.0 → 8.0.6)是向后兼容的修订发布,但框架与官方生态组件(如 think-orm、think-filesystem)强耦合。只更新 topthink/framework 会导致版本错配:
-
topthink/think-orm可能卡在 ^3.0.0,而 8.0.6 内部依赖的是 ^3.0.3+ 的修复版 -
think-filesystem若仍为 2.0.0,会缺失 8.0.4 引入的withContext()方法支持 - 不加
--with-dependencies时,Composer 默认不升级其子依赖,静默保留旧版
哪些扩展包要特别检查是否同步更新
以下扩展包在 8.0.6 中有明确适配变更,必须确认版本匹配:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
-
topthink/think-orm:需 ≥ 3.0.5(修复了whereExists在 PostgreSQL 下的 SQL 错误) -
topthink/think-filesystem:需 ≥ 2.0.4(修正 S3 驱动中putFileAs的元数据覆盖逻辑) -
topthink/think-view:需 ≥ 2.0.3(解决模板继承中{extend}标签嵌套解析异常) - 若使用
topthink/think-multi-app,需 ≥ 2.0.2(修复多应用下中间件注册顺序错乱)
更新后必做的三件事,否则新特性不生效
TP8 的配置、路由、ORM schema 全部缓存在 runtime/ 目录下,旧缓存会劫持新逻辑:
立即学习“PHP免费学习笔记(深入)”;
- 手动删除
runtime/目录(不要只清空子目录,整删最稳妥) - 运行
php think clear强制刷新所有缓存类型(含模板、日志、配置、路由) - 立即执行
php think optimize:schema—— 8.0.6 优化了子目录模型的扫描性能,但旧缓存会跳过该逻辑
最容易被忽略的是 runtime/ 没删干净:哪怕只残留一个 runtime/cache/,就可能导致 php think version 显示 8.0.6,但实际运行的仍是 8.0.0 的路由解析器。每次更新 minor/patch 版本,都得把它当「缓存污染」来处理。


















