thinkphp5.0.24升级到6.1.5需重点适配控制器的命名空间、依赖注入、request对象参数获取、中间件替代_initialize、view门面渲染等;必须显式声明完整命名空间,改用$request->param()等方法,禁用$this->fetch(),启用中间件和facade视图。

控制器类定义与命名空间需显式声明
TP5中控制器类常省略命名空间(尤其在快速开发时),TP6强制要求完整命名空间,且必须与目录结构严格一致。
例如 TP5 的 application/index/controller/Index.php:
→ TP6 中必须写为:
-
命名空间:
namespace app\index\controller;(不能漏掉app\前缀) -
继承类:改为
use think\Controller;→use think\controller\Base;或更推荐的use think\facade\View;+ 独立响应逻辑 -
方法返回:TP5常用
$this->fetch();TP6建议统一用return view('index');或return json(['code'=>0]);
请求参数获取方式要切换到 Request 对象
TP5中大量使用 input('id')、input('post.name') 等助手函数,TP6仍保留但不推荐在控制器方法内直接调用,官方倾向通过依赖注入获取 think\Request 实例。
- 把
input('get.id')改为$request->param('id')(自动合并 get/post/put) - 获取 POST 数据:用
$request->post('name'),比input('post.name')更明确、类型更安全 - 文件上传:TP5用
request()->file('image'),TP6保持相同,但需确认think\File类已正确引入 - 注意:TP6默认关闭
input()的全局变量模拟(如input('$_SERVER.HTTP_HOST')),如有依赖需改用$request->server('HTTP_HOST')
依赖注入和中间件绑定要补全
TP5控制器中常手动 new 模型或调用 Db::table(),TP6鼓励通过构造函数或方法参数自动注入,提升可测试性和解耦度。
- 模型注入示例:
public function index(\app\index\model\User $user),框架自动实例化 - 若控制器需前置校验(如登录态),TP5靠
_initialize(),TP6应改用 中间件,在app/middleware.php中注册并绑定到路由或控制器 - 不再支持
__construct()中直接调用parent::__construct();如需初始化逻辑,建议提取为私有方法或交由中间件处理
模板渲染与视图赋值逻辑需调整
TP5中 $this->assign() 和 $this->fetch() 是连贯操作,TP6中 View 已转为门面(Facade),用法更灵活但也更严格。
- 赋值改用
View::assign('title', '首页')或链式写法return view('index')->assign('list', $data); - 不再支持
$this->display()或$this->show()等别名方法 - 模板路径默认为
view/模块/控制器/方法.html,若自定义路径,需用view('common@404')语法(TP6支持跨模块引用) - 注意:TP6默认开启模板缓存,修改模板后如未生效,先清空
runtime/view/目录
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











