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


Я всего лишь новичок в тонких рамках. Я написал один API с использованием Slim framework.

Запрос POST поступает в этот API из приложения для iPhone. Этот запрос на публикацию выполнен в формате JSON.

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

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

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

"{\"password\":\"admin123\",\"login\":\"[email protected]\",\"device_type\":\"iphone\",\"device_token\":\"785903860i5y1243i5\"}"

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

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

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

<?php

    require 'Slim/Slim.php';    

    \Slim\Slim::registerAutoloader();

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

    $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;
?>
Author: halfer, 2015-01-21

2 answers

Вообще говоря, вы можете получить доступ к параметрам 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
});
 31
Author: guillermoandrae, 2016-12-02 02:14:41

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

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

Пример:

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

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

$someVariable = $allPostVars['someVariable'];
 7
Author: lurker123456, 2016-01-12 08:18:29