Slim PUT请求空体

时间:2015-03-06 20:56:39

标签: php json put slim

我正在使用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上有效,但在远程开发服务器上不起作用。可能是什么原因?我是否需要更改服务器上的任何设置?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

尝试使用getInstance()。

$body = json_decode($app->getInstance()->request()->getBody());
相关问题