thinkphp项目升级至6.0需先满足php≥7.1、启用必要扩展并创建git分支;再重命名文件、修正命名空间与继承关系;最后适配db绑定查询、save拆分、模板路径、中间件返回及路由注册。

将ThinkPHP项目从旧版本(如5.1或更早)升级到6.0及以上,既要保留原有开发效率、路由灵活性和ORM链式调用等核心优点,又必须绕开命名空间错位、控制器继承断裂、数据库查询语法变更等高频风险点。
确认升级前提与环境准备
第一步:检查PHP版本是否为【7.1.0或更高】,低于此版本的PHP将无法加载ThinkPHP6.0核心类。运行php -v验证,若输出为7.0.x或更低,请先升级PHP。
第二步:确认已启用mbstring、json、openssl、pdo_mysql(或对应数据库扩展),缺一不可。可在phpinfo()页面中逐项核对,缺失扩展会导致框架启动即报Fatal error。
第三步:用Git创建独立分支——执行git checkout -b upgrade-to-tp6,所有操作在此分支进行。这一步不可跳过,【线上环境严禁直接composer update】。
代码结构与命名空间迁移
方法一:批量重命名控制器与模型文件
进入app目录,将controller/下所有***Controller.class.php文件重命名为***.php(如IndexController.class.php → Index.php);同理,model/下***Model.class.php → ***.php。注意Uploads目录除外,保持原样。
方法二:统一替换命名空间声明
用编辑器全局搜索替换:把namespace Admin\Controller;全部改为namespace app\admin\controller;,把namespace Home\Model;改为namespace app\home\model;。替换后务必检查子命名空间层级是否匹配实际目录深度,例如app\api\v1\controller不能误写成app\api\controller。
方法三:修正类继承关系
① 删除所有类定义中的Controller字样:class IndexController extends BaseController → class Index extends Base;
② 将use Think\Controller;统一改为use think\Controller;(注意think全小写);
③ 模型类中use Think\Model; → use think\Model;,且BaseModel类需同步改为extends \think\Model。
关键语法与行为变更处理
DB类查询必须启用参数绑定:原$where = "id = ".$_GET['id']; $db->where($where)->select();必须重构为$db->where('id', input('id'))->select();。不这样做会触发SQL注入漏洞,且TP6默认关闭了原始字符串where解析。
save()方法不再自动判断增删:旧代码M('user')->save($data)需明确拆分为→insert($data)或→update($data),若含主键则用update;无主键则用insert。漏判将导致数据重复插入或更新失败。
模板路径默认移除default层:原view/default/index/index.html需移至view/index/index.html,否则系统报错“模板文件不存在”,错误码10006。
中间件与路由适配
TP6强制中间件返回Response对象:旧版中间件中return $next($request)必须保留,但若中间件内有exit或die,需全部删除——框架已接管响应生命周期,手动终止会导致后续中间件和控制器不执行。
注解路由需启用扩展:在config/app.php中设置'route_annotation' => true,并确保composer require topthink/think-annotation已执行。未开启时,/** @route('/api/user') */这类注释会被完全忽略。
资源路由注册方式变更:Route::resource('blog', 'Blog');需改写为Route::rule('blog', 'blog')->via(['GET', 'POST'])->name('blog');,否则资源动词(index/create/store等)无法映射。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











