You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 18:27:02