Slim Framework v3,通过 POST 问题获取 JSON 数据
Slim Framework v3, getting JSON data via POST issue
我正在使用 Slim Framework v3,在访问我从浏览器客户端发送到我的 REST API 的 JSON 数据时遇到了一些问题。
目前我正在使用 $request->getParsedBody();
来访问数据,但所有 returns 都是一个字符串,我不想解析它,因为我认为对此有更好的解决方案问题。
这是客户端发送的内容:
$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();
,但是 returns 是 Slim\Http\RequestBody 类型的对象并且只有受保护的变量。我还没有找到任何函数来访问这些受保护的变量。
请记住我使用的是 Slim v3,他们已经从 v2 改变了很多东西。
如果没有更好的方法,你有什么建议如何最好地解析它吗?
问题似乎出在您从客户端获取的数据中。在这种情况下,您作为用户接收到某种 var_dump
或 var_export
输出。根据您收到的数据,我会在您的客户端代码中搜索这样的内容:
<?php var_export([json_encode($data) => '',],true);
在服务器端无法解析正文,因为它不是正确的 JSON 字符串。
据 Slim 3 文档报道:
JSON requests are converted into associative arrays with json_decode($input, true).
所以 getParsedBody 绝对是正确的选择。
相反,您是否检查过客户设置的请求类型?应该是 application/json
才能使 Slim 请求对象对原始主体进行正确的解释。
例如:
Content-Type: application/json
我正在使用 Slim Framework v3,在访问我从浏览器客户端发送到我的 REST API 的 JSON 数据时遇到了一些问题。
目前我正在使用 $request->getParsedBody();
来访问数据,但所有 returns 都是一个字符串,我不想解析它,因为我认为对此有更好的解决方案问题。
这是客户端发送的内容:
$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();
,但是 returns 是 Slim\Http\RequestBody 类型的对象并且只有受保护的变量。我还没有找到任何函数来访问这些受保护的变量。
请记住我使用的是 Slim v3,他们已经从 v2 改变了很多东西。
如果没有更好的方法,你有什么建议如何最好地解析它吗?
问题似乎出在您从客户端获取的数据中。在这种情况下,您作为用户接收到某种 var_dump
或 var_export
输出。根据您收到的数据,我会在您的客户端代码中搜索这样的内容:
<?php var_export([json_encode($data) => '',],true);
在服务器端无法解析正文,因为它不是正确的 JSON 字符串。
据 Slim 3 文档报道:
JSON requests are converted into associative arrays with json_decode($input, true).
所以 getParsedBody 绝对是正确的选择。
相反,您是否检查过客户设置的请求类型?应该是 application/json
才能使 Slim 请求对象对原始主体进行正确的解释。
例如:
Content-Type: application/json