Slim PUT запрос пустого тела

0

Я использую slim php framework для разработки REST API. Я успешно выполняю запросы POST и GET. Я использую промежуточное ПО ContentTypes, а также для разбора тела JSON в сообщениях POST и PUT, однако мой запрос 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);

Когда я пытаюсь вернуть тот же JSON из API, он возвращает пустой массив. Я попробовал POSTMAN на хром и выше кода, но не работает. В чем проблема.

Обновление: я проверил, что тот же код работает на localhost, но не работает на удаленном сервере. В чем причина? Нужно ли изменять любые настройки на сервере?

Теги:
slim
put

2 ответа

0

Попробуйте использовать getInstance().

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

Slim читает php://input для получения содержимого тела запроса, поэтому, какова бы ни была проблема, он связан с данными этого потока.

У вас есть другой код, который пытается прочитать php://input? Если это так, обратите внимание, что это возможно только с PHP 5.6 (что может быть у вашей локальной машины, когда ваш сервер не работает).

  • 0
    Slim делает php://input но я не читаю это прямо в моем коде. Путаница в том, что POST работает, и я уверен, что slim читает php://input для post. Мой сервер на php 5.3.13, и мне кажется, что это проблема, но опять же, почему тогда работает метод post?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню