Как получить доступ к телу запроса JSON запроса POST В Slim?

Я просто новичок В Slim framework. Я написал один API, используя Slim framework.

запрос POST поступает в этот API из приложения iPhone. Этот запрос POST находится в формате JSON.

но я не могу получить доступ к параметрам POST, которые отправляются в запросе с iPhone. Когда я попытался распечатать значения параметров POST, я получил "null" для каждого параметра.

$allPostVars = $application->request->post(); //Always I get null

затем я попытался получить тело предстоящего запроса, преобразовать тело в Формат JSON и отправил его обратно в качестве ответа на iPhone. Затем я получил значения параметров, но они находятся в очень странном формате следующим образом:

"{"password":"admin123","login":"admin@gmail.com","device_type":"iphone","device_token":"785903860i5y1243i5"}"

так что одно можно сказать наверняка, что параметры запроса POST поступают в этот файл API. Хотя они недоступны в $application->request->post(), Они входят в тело запроса.

моя первая проблема заключается в том, как я должен получить доступ к этим параметрам POST из тела запроса, а моя вторая проблема-почему данные запроса отображаются в такой странный формат, как указано выше, после преобразования тела запроса в формат JSON?

Ниже приведен необходимый фрагмент кода:

<?php

    require 'Slim/Slim.php';    

    SlimSlim::registerAutoloader();

    //Instantiate Slim class in order to get a reference for the object.
    $application = new SlimSlim();

    $body = $application->request->getBody();
    header("Content-Type: application/json");//setting header before sending the JSON response back to the iPhone
    echo json_encode($new_body);// Converting the request body into JSON format and sending it as a response back to the iPhone. After execution of this step I'm getting the above weird format data as a response on iPhone.
    die;
?>

2 ответов


вообще говоря, вы можете получить доступ к POST параметры индивидуально одним из двух способов:

$paramValue = $application->request->params('paramName');

или

$paramValue = $application->request->post('paramName');

дополнительная информация доступна в документации:http://docs.slimframework.com/#Request-Variables

когда JSON отправляется в POST, вы должны получить доступ к информации из текста запроса, например:

$app->post('/some/path', function () use ($app) {
    $json = $app->request->getBody();
    $data = json_decode($json, true); // parse the JSON into an assoc. array
    // do other tasks
});

"Slim может анализировать данные JSON, XML и URL-кодированные из коробки" -http://www.slimframework.com/docs/objects/request.html в разделе "тело запроса".

самый простой способ обработки запроса в любой форме тела-через " getParsedBody ()". Это будет делать пример guillermoandrae, но на 1 строке вместо 2.

пример:

$allPostVars = $application->request->getParsedBody();

затем вы можете получить доступ к любым параметрам по их ключу в заданном массиве.

$someVariable = $allPostVars['someVariable'];