Slim PUT请求为空正文


Slim PUT request empty body

我正在使用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,但不起作用。问题出在哪里。

更新:我已经验证了相同的代码在本地主机上可以工作,但在远程开发服务器上不工作。原因是什么?我需要更改服务器上的任何设置吗?

Slim读取php://input以获取请求主体的内容,因此无论问题是什么,它都与该流的细节有关。

您是否有其他代码尝试读取php://input?如果是这样的话,请注意,这只能从PHP 5.6开始(当您的服务器没有PHP 5.6时,您的本地机器可能会有PHP 5.6)。

尝试使用getInstance()。

$body = json_decode($app->getInstance()->request()->getBody());