web-dev-qa-db-fra.com

Comment accéder à un corps de requête JSON d'une requête POST dans Slim?

Je suis juste un débutant dans le cadre Slim. J'ai écrit une API en utilisant le framework Slim.

Une demande POST arrive sur cette API à partir d'une application iPhone. Cette demande POST est au format JSON).

Mais je ne suis pas en mesure d'accéder aux paramètres POST qui sont envoyés dans une demande de l'iPhone. Lorsque j'ai essayé d'imprimer les valeurs des paramètres POST "null" pour chaque paramètre.

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

Ensuite, j'ai essayé d'obtenir le corps d'une demande à venir, de convertir le corps au format JSON et de le renvoyer en réponse à l'iPhone. Ensuite, j'ai obtenu les valeurs des paramètres mais ils sont dans un format très étrange comme suit:

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

Donc, une chose est sûre: POST arrivent dans ce fichier API. Bien qu'ils ne soient pas accessibles dans $application->request->post(), ils entrent dans le corps de la requête.

Mon premier problème est de savoir comment dois-je accéder à ces paramètres POST depuis le corps de la demande et mon deuxième problème est pourquoi les données de la demande sont affichées dans un format aussi étrange que ci-dessus après la conversion du corps de la demande au format JSON ?

Voici l'extrait de code nécessaire:

<?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;
?>
14
user4407686

De manière générale, vous pouvez accéder individuellement aux paramètres POST de deux manières:

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

ou

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

Plus d'informations sont disponibles dans la documentation: http://docs.slimframework.com/#Request-Variables

Lorsque JSON est envoyé dans un POST, vous devez accéder aux informations à partir du corps de la demande, par exemple:

$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
});
35
guillermoandrae

"Slim peut analyser les données JSON, XML et URL encodées" - http://www.slimframework.com/docs/objects/request.html sous "The Request Body".

Le moyen le plus simple de traiter une demande sous n'importe quelle forme corporelle est via le "getParsedBody ()". Cela fera exemple guillermoandrae mais sur 1 ligne au lieu de 2.

Exemple:

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

Ensuite, vous pouvez accéder à tous les paramètres par leur clé dans le tableau donné.

$someVariable = $allPostVars['someVariable'];
11
lurker123456