我正在使用slim php框架来开发REST API。我成功实现了POST和GET请求。我也在使用ContentTypes中间件来解析POST和PUT请求中的JSON主体但是我的PUT请求总是在服务器上提供空字符串。 POST工作正常,我可以将解析后的JSON作为PHP关联数组但不能在PUT请求中获取它。我在头文件中使用application / json,我不想使用application / x-www-form-urlencoded方法。
$app->map('/example/:id', function ($id) use($app, $log) {
//$body = $app->request()->getBody();
//using the above in other POST calls & it works but does not in this case
$body = json_decode($app->request()->getBody()); //tried this. no success
var_dump($body);
} )->via ( 'PUT', 'PATCH' );
我通过CURL这样称呼它
$headers = array(
'Content-Type'=>'application/json;charset=utf-8',
);
$id = 123;
$body = array("name"=>"myfirstname","email"=>"myemail");
$json_str = json_encode($body);
$response = Requests::put($base_url.'/api/v1/example/'.$id,$headers,$json_str);
当我尝试从API返回相同的JSON时,它返回空数组。我在chrome和上面的代码上尝试过POSTMAN但是不起作用。问题是什么。
更新:我已验证相同的代码在localhost上有效,但在远程开发服务器上不起作用。可能是什么原因?我是否需要更改服务器上的任何设置?
答案 0 :(得分:0)
Slim读取php://input
以获取请求正文的内容,因此无论问题是什么,它都与该流的细节有关。
您是否有其他尝试阅读php://input
的代码?如果是这样,请注意,这只能从PHP 5.6开始(当您的服务器没有时,您的本地计算机可能会这样做。)
答案 1 :(得分:0)
尝试使用getInstance()。
$body = json_decode($app->getInstance()->request()->getBody());