【问题标题】:Yii2 RESTful Webservice: JSON Request FormatYii2 RESTful Webservice:JSON 请求格式
【发布时间】:2014-08-13 16:33:54
【问题描述】:

这是我的第一个问题:

我正在尝试使用 Yii2 构建一个 RESTful Web 服务。 Controller 继承自 ActiveController 并具有相应的模型。数据读取工作正常且没有问题。

但是当我尝试创建新对象时,我遇到了错误。我使用 Chrome 扩展 Advanced Rest Client 并发布以下数据:

{
    "team": 1
}

我也尝试了不同的格式。

但我总是得到这样的回应:

[{
    "field":"team",
    "message":"Team cannot be blank."
}]

你对我做错了什么有什么建议吗?

谢谢!

【问题讨论】:

  • 您能否将捕获 $_POST 参数的部分放在您的操作中?

标签: json web-services rest yii yii2


【解决方案1】:

我认为你们都让我走上了正轨。谢谢!

问题在于 Yii2 使用集成解析器来解析 JSON 请求。我认为这些解析器是默认配置的(因为在文档中没有提示配置它)。但是解析器必须自己配置。

下面是如何在主配置中配置解析器:

'request' => [
    'parsers' => [
        'application/json' => 'yii\web\JsonParser',
    ]
]

您可以在这里找到更多信息:JsonParser

我希望这可以帮助遇到同样问题的其他人。

【讨论】:

  • 太棒了!!这正是我的问题!
  • 在提交请求时明确添加标头“Content-Type = application/json”也会有所帮助
  • 我仍然无法获取请求参数 'request' => [ 'parsers' => [ 'application/json' => 'yii\web\JsonParser', ], 'cookieValidationKey' => ' 1VwIjoKRv9mGh6NTZnmvFu1roaeC2zdQ', ],
【解决方案2】:

我认为您正在使用 $_POST 捕获发布的数据,这不起作用。因为您正在发送 json 数据。如果是这样,您必须使用file_get_contents('php://input') 来访问发送数据。这是请求的 Content-Type 标头的问题。 $_POST 在设置为 application/x-www-form-urlencoded 时有效

这是一个类似的问题handle json request in PHP

【讨论】:

  • 这对我来说适用于 'Content-Type: application/xml'
  • 您可以使用Request::getBodyParams 根据Content-Type 标头获取和解析输入。
猜你喜欢
  • 2019-12-03
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2016-07-25
相关资源
最近更新 更多