thinkphp 5.1 升级到 6.0 需结构、规范与思维同步升级,涉及目录重构、命名空间变更、配置读取方式调整、控制器类型提示、模型操作重写及路由中间件注册方式更新,并强调分支隔离、环境验证、分步测试与可回退机制。

ThinkPHP 5.1 升级到 6.0 不是替换一个包就能完事,它是一次结构、规范和思维的同步升级。直接改 composer.json 然后 run update,大概率会报错中断、路由失效、模型查不到数据——因为 6.0 废弃了大量 5.1 的写法,且目录、命名空间、配置读取方式全变了。关键不是“能不能升”,而是“怎么让升的过程可控、可测、可回退”。
环境与分支准备:先搭安全垫
别跳过这步,它是整个升级过程最省时间的投资。
- 用 Git 新建独立分支:
git checkout -b upgrade/tp6,所有操作只在这个分支进行 - 确认 PHP ≥ 7.1(推荐 7.3+),并启用
mbstring、pdo、json、openssl扩展;执行php -v && php -m | grep -E 'mbstring|pdo|json'快速验证 - 备份数据库结构和核心数据(尤其是配置表、用户表),升级失败时能秒级还原
- 本地开发环境先行,切勿在生产环境直接操作
依赖与目录重构:从 Composer 开始重搭骨架
6.0 强制使用 Composer 管理,旧版 thinkphp/ 目录要彻底移除。
- 执行
composer remove topthink/framework清掉 5.1 核心 - 安装新版:
composer require topthink/framework:^6.0 topthink/think-multi-app:^1.0(多应用必需) - 目录结构调整:
-
application/→ 改名为app/ -
config/和route/目录直接复制进新项目根目录 -
public/index.php需按 6.0 官方入口文件重写引导逻辑(重点检查require __DIR__.'/../vendor/autoload.php';和App::run()->send();)
-
配置与代码适配:逐项修复高频断点
升级后跑不起来?90% 问题集中在这几类:
-
配置读取:把
Config::pull('app.debug')全部换成Config::get('app.debug');一级配置必须显式写出,不能省略前缀 -
控制器写法:方法参数需加类型提示(如
public function index(string $name = 'World')),返回值建议标注: \think\Response -
模型操作:
- 废除
Db::table()->where(...)->select()中的字符串条件,统一用数组或闭包 -
save()第二个参数(是否更新)已弃用,改用$model->isUpdate(true)->save() - 时间戳字段需在模型中显式声明
protected $autoWriteTimestamp = true;
- 废除
-
路由与中间件:5.1 的
Route::get写法保留,但中间件注册方式改为->middleware(MiddlewareClass::class),且必须在app/middleware.php中定义别名
测试与收尾:用最小闭环验证有效性
别等全部改完再测,每完成一个模块就验证一次。
- 先访问首页,确认框架能启动、无 fatal error
- 挑 3–5 个核心接口(登录、列表、提交),用 Postman 发起请求,看状态码、数据结构是否正常
- 重点检查:Session 是否持续、上传是否成功、验证码能否生成、数据库写入时间戳是否自动填充
- 开启调试栏:
composer require topthink/think-trace,快速定位未捕获异常 - 上线前,在预发布环境用真实流量压测 1 小时,观察日志是否有大量 Warning 或 SQL 错误
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











