ThinkPHP6.0推荐用input()助手函数或Request对象的post()/param()/file()方法接收POST数据:input()自动合并并支持类型转换与过滤;post()仅读表单数据;param()合并多源参数;JSON数据需$request->input()解析;文件必须用file()方法处理。

ThinkPHP6.0 接收 POST 数据有明确推荐方式,核心是避免直接用 $_POST,优先使用框架封装的安全方法。关键在于区分数据来源(表单、JSON、原始流)、是否需要过滤/转换,以及是否含文件。
推荐用 input() 助手函数
这是最常用也最安全的方式,自动合并 GET/POST/PUT/PATCH 参数,并支持默认值、类型转换和过滤:
-
input('username'):自动从 POST 或 GET 中取值,POST 优先 -
input('username/s'):强制字符串类型,等价于 htmlspecialchars 过滤 -
input('id/d'):取值并转为整型,非法时返回 0 -
input('data/a'):明确声明要数组,即使前端传错也返回空数组而非报错 -
input('token', '', 'md5'):取值后执行 md5 处理
用 Request 对象的 post() 或 param()
适用于控制器中已注入或获取到 Request 实例的场景:
-
$request->post():只取 POST 表单数据(application/x-www-form-urlencoded或multipart/form-data),不含路由或 GET 参数 -
$request->post('username'):取指定字段,不传则返回 null -
$request->param():合并 POST、GET、路由变量,适合通用参数获取 -
$request->param('id', 0, 'intval'):带默认值和类型转换
处理 JSON 类型的 POST 请求
当前端以 Content-Type: application/json 提交时,$_POST 为空,input() 和 post() 默认也读不到:
立即学习“PHP免费学习笔记(深入)”;
- 正确方式:
$json = $request->input();(自动解析 JSON 字符串为数组) - 或手动读取:
$raw = file_get_contents('php://input');,再json_decode($raw, true) - 注意:
input('xxx')对 JSON 内部字段无效,必须先整体解析再取键
上传文件需单独处理
input() 和 post() 不会包含文件字段,必须用 file() 方法:
$file = $request->file('avatar');-
$file = $request->file('images.*');(接收多文件) - 后续调用
$file->move()保存
不复杂但容易忽略:确认前端 Content-Type 匹配处理方式,表单用 post(),JSON 用 input() 或 php://input,文件一定走 file()。



















