Yii2 REST API注册接口POST请求$_POST为空该如何解决?
问题根因
你已经在配置中开启了yii\web\JsonParser解析器,用于解析application/json类型的请求。PHP原生$_POST全局变量仅支持解析application/x-www-form-urlencoded和multipart/form-data格式的请求体,无法识别JSON格式的请求内容,因此输出为空数组。
修复方案
方案1(推荐:适配JSON请求,符合REST API规范)
不用修改Postman的JSON传参格式,替换控制器中直接调用$_POST的逻辑,使用Yii框架封装的请求方法获取参数即可,框架会自动适配JSON解析器:
public function actionSignup() { Yii::$app->response->format = Response::FORMAT_JSON; $model = new UserData(); if (Yii::$app->request->isPost) { // 批量赋值,对应字段已在模型规则中声明,可安全赋值 $model->attributes = Yii::$app->request->post(); // 也可按需单个获取参数:$model->email = Yii::$app->request->post('email'); if ($model->validate()) { $model->save(); Yii::$app->response->setStatusCode(201); return 'ok'; } else { Yii::$app->response->setStatusCode(422); return $model->getErrors(); } } }
方案2(适配表单提交,可保留$_POST写法)
如果不需要JSON传参,修改Postman的请求配置即可:
- 打开请求的
Body标签,选择form-data或者x-www-form-urlencoded格式填写参数 - 此时请求头的Content-Type会自动设置为对应格式,原生
$_POST即可正常获取参数
验证方法
你可以使用var_dump(Yii::$app->request->getBodyParams())打印所有原始请求参数,确认请求内容是否正常被框架接收。
内容的提问来源于stack exchange,提问作者furby
相关产品推荐
相关产品推荐

