tp6不兼容tp5,无法平滑迁移;新项目应选tp6,老项目升级需重写路由、中间件、配置加载和类命名逻辑。

ThinkPHP6 和 ThinkPHP5 不是简单的小版本迭代,而是架构级重构。如果你正考虑升级或新项目选型,直接结论是:**TP6 不兼容 TP5,不能平滑迁移;新项目应无条件选 TP6,老项目升级需重写路由、中间件、配置加载和类命名逻辑**。
目录结构与应用模式完全不同
TP5 默认是多应用结构,根目录下有 Application(首字母大写),里面分 index/、admin/ 等模块,命名空间是 \app\index\controller\Index;TP6 默认是单应用,只有小写的 app/ 目录,控制器路径为 app/controller/Index.php,对应命名空间 app\controller\Index。
常见错误现象:把 TP5 的 Application/index/controller 直接拷进 TP6 的 app/,结果 404 或 Class not found —— 因为命名空间没改,路径大小写不匹配,且 TP6 不自动识别模块子目录。
- 若坚持多应用,必须手动安装扩展:
composer require topthink/think-multi-app - TP5 的
extend/目录在 TP6 中已废弃,所有第三方类必须走vendor/或 PSR-4 自动加载 -
public/仍是 Web 入口根目录,但 TP6 的index.php只做两件事:引入vendor/autoload.php和启动think\App,不再包含任何框架初始化逻辑
配置体系从「集中式」变成「分层覆盖式」
TP5 的 config.php 是一个大数组文件,TP6 拆成 config/app.php、config/database.php 等多个文件,按功能划分。真正起“环境开关”作用的是 .env 文件 —— 它只负责覆盖被 env() 显式读取的字段,不会自动映射到所有配置项。
典型坑点:改了 .env 里的 DB_HOST=127.0.0.1,但数据库还是连不上 → 检查 config/database.php 是否写了 'hostname' => env('DB_HOST', '127.0.0.1'),而不是硬编码 'hostname' => 'localhost'。
-
.env必须叫这个名字,不能是.env.local或.env.production,TP6 不支持多环境文件自动切换 -
.env里定义的变量,仅对调用env()的地方生效;其他配置项(如中间件顺序、模板引擎设置)仍需手动改config/下对应文件 - 开发时务必把
.env加入.gitignore,避免数据库密码泄露
类自动加载和路由规则强制 PSR-4 + 小驼峰
TP6 彻底放弃 TP5 的混合加载机制(自定义 + Composer),只认 Composer 的 PSR-4 规则:类名 app\service\UserService 必须对应物理路径 app/service/UserService.php,大小写、路径、命名空间三者必须严格一致。
TP5 允许控制器方法用下划线命名(user_list),TP6 要求小驼峰(userList),否则路由无法匹配,也不报错,直接返回 404 —— 这是最容易被忽略的静默失败点。
- 新增类后必须运行
composer dump-autoload(开发中建议加-o参数生成优化后的自动加载映射) - TP5 的门面(Facade)在 TP6 中依然可用,但推荐改用依赖注入:在控制器构造函数中声明类型提示,容器会自动解析
- TP5 中常见的
Loader::addNamespace()或手动require方式,在 TP6 中全部失效
中间件、ORM 和容器机制本质不同
TP6 的中间件基于 PSR-15 标准,采用管道模式(pipe)执行,每个中间件必须返回 Response 实例;TP5 的中间件是回调式,返回值处理更宽松。这意味着你不能把 TP5 的中间件代码原样复制到 TP6 的 app/middleware/ 下。
ORM 层也被彻底重写:TP6 把 Query 和 Model 拆成两个独立组件,Query 负责查询构建,Model 负责数据对象和业务逻辑,链式调用更稳定,类型提示更明确。
- TP6 容器原生支持依赖注入,构造函数参数可直接类型提示接口,无需再用
app()->make()手动获取 - TP5 的
session默认开启,TP6 默认关闭,需在config/middleware.php中显式注册\think\middleware\SessionInit::class - TP6 默认不加载模板引擎,要用
composer require topthink/think-view单独安装,且配置项移到config/template.php
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











