不能用 composer update 升级 tp5 到 tp6,因二者是完全不同的框架;tp6 要求新建项目并迁移代码,涉及目录结构、命名空间、配置格式、路由写法、迁移扩展等全面重构。

不能用 composer update 升级 TP5 到 TP6,这不是版本补丁,是两套完全不同的框架。强行升级只会让 Class 'think\App' not found 这类错误铺满日志。
为什么 composer update 对 TP5→TP6 完全无效
Composer 默认只在同主版本号内找更新(比如 5.1.x → 5.1.y),而 TP6 的 require 约束是 "topthink/framework": "^6.0",和 TP5 的 "^5.1" 根本不在一个依赖图分支里。你执行 composer update topthink/framework,它连 6.x 的包都不会拉。
常见现象包括:
-
Call to undefined method think\Request::param()(Request类结构已重写) - 所有控制器路径报
Class not found(application/目录废弃,PSR-4 命名空间全变) -
php think migrate:install命令不存在(迁移扩展不兼容,TP5 用think-migration:^2.0,TP6 必须用^4.3)
必须新建 TP6 项目再迁移代码
TP6 是骨架重写:配置扁平化、路由入口移到 app/route/app.php、数据库返回 Collection 而非数组、中间件注册方式变更……这些不是改几行就能对齐的。
实操步骤:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在空目录下运行
composer create-project topthink/think tp6或composer require topthink/think-skeleton:^6.0 - 把原 TP5 的业务逻辑(控制器、模型、验证器等)按 PSR-4 规范挪进新项目的
app/下对应命名空间目录(如app/controller/User.php) - 旧
config/database.php中的mysql://...连接串写法失效,必须改为数组格式,并确认mbstring、fileinfo扩展已启用 - 路由定义不能照搬
Route::get('user/:id', 'index/user/read'),要改成Route::get('user/:id', [\app\controller\User::class, 'read'])->option(['merge_param' => true])
think-migration 版本必须严格匹配 TP6
装错迁移扩展版本,php think migrate 命令会直接消失,或 up() 方法里调用 whereTime() 报错。
关键点:
- TP6/TP7 只能用
topthink/think-migration:^4.3(截至 2026 年 5 月最新稳定版) - 必须声明在
composer.json的require-dev区块,不能只写在require里 - 安装后立刻执行
composer dump-autoload,否则命令类不被识别 - 迁移文件必须放在
database/migrate/下,命名格式为YYYYMMDDHHIISS_create_user_table.php
多应用、跨应用配置和模板继承容易漏掉的细节
TP6 彻底放弃“模块”,改用“应用”隔离。这不只是目录改名,而是运行时加载逻辑重构。
典型坑点:
-
app/admin/下的数据库配置不会自动继承根目录config/database.php,必须显式提供app/admin/config/database.php - 模板继承写法从
{extend name="public:base"}变成{extend name="public@base"},且public必须是独立应用(即app/public/存在并已注册视图路径) -
app/common.php是全局的;各应用自己的辅助函数得放在app/admin/common.php,并在app/admin/provider.php中手动引入 - 入口文件如
public/admin.php必须含require __DIR__ . '/../vendor/autoload.php';,否则think-multi-app扩展根本不会加载
最常被忽略的是 autoload 映射——TP6 不再默认注册 think\ 根命名空间,所有核心类需通过 think\facade\* 访问,或者用容器 app('request') 获取,硬 new \think\Request 必然失败。










