ThinkPHP 6.0+ 废弃 Request::instance(),应改用门面类 \think\facade\Request 或助手函数 request();param() 合并 GET/POST/Route 并过滤空值,但不解析 JSON 请求体,JSON 数据需用 input() 或 json(true) 显式获取。
Request::instance()->param() 在 ThinkPHP 6.0+ 已失效
ThinkPHP 6.0 起彻底移除了静态单例模式的
,调用它会直接抛出
。这不是配置问题,是框架底层重构导致的硬性废弃。
真正可用的入口是容器注入或助手函数:
控制器方法参数自动注入:
助手函数
(返回当前请求实例)
门面类
(推荐,与 TP5 兼容性较好)
param()、get()、post() 等方法的行为差异
默认合并
+
+
参数,且会自动过滤空值(如
、
、
),但不处理 JSON 请求体;
和
则严格按来源取值,不会合并也不会过滤。
常见踩坑点:
立即学习
“
PHP免费学习笔记(深入)
”;
用
获取不到 POST JSON 数据里的
—— 需改用
或
表单提交空字符串时,
返回
,而
仍返回
不识别
请求体,必须显式调用
才能解析
TP5 升级到 TP6 的兼容写法
如果老项目大量用了
,又不想逐个改控制器,可以用门面兜底:
注意两点:
门面类在 TP6 中默认启用,无需额外配置
TP5 的
在 TP6 里行为有变:TP6 的
默认只读
/
,不读路由变量,要读路由需显式写
或改用
JSON 请求体必须显式解析
TP6 不再自动将
请求体合并进
或
,这是和 TP5 最关键的区别。如果你的接口接收前端
,直接
会返回
。
正确做法只有两个:
用
—— 它内部会尝试解析 JSON(但仅限顶层字段)
用
获取完整 JSON 数组,再手动取值:
别依赖
或
自动处理 JSON,它们真的不会碰请求体。
Request::instance()Fatal error: Uncaught Error: Call to undefined method think\Request::instance()public function index(\think\Request $request)request()\think\facade\Requestparam()GETPOSTRoutenull''[]get()post()param('id')idinput('id')json()param('name')nullpost('name')''param()application/jsonjson(true)Request::instance()->param()// 替换所有 Request::instance()->xxx 为
\think\facade\Request::param()
\think\facade\Request::get()
\think\facade\Request::post()
input('name')input()GETPOSTinput('name', '', 's')param()application/jsonparam()post()fetch({ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({a:1}) })param('a')nullinput('a')json(true)$data = \think\facade\Request::json(true); echo $data['a'] ?? null;post()param()