【问题标题】:Slim Framework v3, getting JSON data via POST issueSlim Framework v3,通过 POST 问题获取 JSON 数据
【发布时间】:2016-05-11 23:05:53
【问题描述】:

我正在使用 Slim Framework v3,但在访问从浏览器客户端发送到我的 REST API 的 JSON 数据时遇到了一些问题。

目前我正在使用$request->getParsedBody(); 访问数据,但它返回的只是一个字符串,我不想解析它,因为我认为这个问题有更好的解决方案。

这是客户端发送的内容:

$data = array ();
$data ["key1"] = "value1";
$data ["key2"] = "value2";
$data ["key3"] = "value3";
$data = json_encode ( $data );

这会产生{"key1":"value1","key2":"value2","key3":"value3"}

服务器上发生了什么?

$app->post ( '/somePath', function ($request, $response) {
    $body = $request->getParsedBody();
    var_dump($body);
    return $response;
});

var_dump(); 正在产生以下输出:

string(86) "array(1) {
  ["{"key1":"value1","key2":"value2","key3":"value3"}"]=>
  string(0) ""
}
"

如您所见,$request->getParsedBody(); 正在返回一个字符串。 有没有更好的方法来做到这一点?

我已经尝试使用$request->getBody();,但它返回一个 Slim\Http\RequestBody 类型的对象,并且只有受保护的变量。我还没有找到任何函数来访问这些受保护的变量。

请记住,我使用的是 Slim v3,与 v2 相比,它们改变了很多东西。

如果没有更好的方法,你有没有建议如何以最好的方式解析它?

【问题讨论】:

  • 您需要使用 Content-Type: application/json header 发布您的数据。

标签: php json slim slim-3


【解决方案1】:

根据 Slim 3 文档的报告:

JSON 请求通过 json_decode($input, true) 转换为关联数组。

所以 getParsedBody 绝对是要走的路。 相反,您是否检查了客户设置的请求类型?应该是application/json,以便让 Slim 请求对象对原始正文进行正确的解释。

例如:

Content-Type: application/json

【讨论】:

  • 好吧,输出看起来更好了,但它仍然是一个字符串string(115) "array(3) { ["key1"]=> string(6) "value1" ["key2"]=> string(6) "value2" ["key3"]=> string(6) "value3" } "
  • 你能发布结果字符串吗?
  • 更新第一条评论
  • 没关系,我的错,我将请求发送到服务器,执行var_dump(),将其发送回客户端并再次执行var_dump()。它现在正在工作。谢谢
  • 很高兴听到这个消息。 ;)
【解决方案2】:

似乎问题出在您从客户端获取的数据中。在这种情况下,您作为用户接收到一种var_dumpvar_export 输出。根据您收到的数据,我会在您的客户端代码中搜索这样的内容:

<?php var_export([json_encode($data) => '',],true);

在服务器端无法解析正文,因为它不是正确的 JSON 字符串。

【讨论】:

  • 我不修改客户端上的数据,期待我已经发布的内容。我发送它:curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data );
  • 你能用客户端代码更新你的问题吗?从我的角度来看,数据正在某些时候被修改。此外,正如@LuigiPresello 所说,检查您发送的数据是否具有正确的内容类型标头(这将有助于框架进行更好的数据格式转换)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多