2015-01-21 23 views
10

Sono solo un principiante nel framework Slim. Ho scritto una API usando il framework Slim.Come accedere a un corpo di richiesta JSON di una richiesta POST in Slim?

Una richiesta POST viene a questa API da un'app per iPhone. Questa richiesta POST è in formato JSON.

Ma non sono in grado di accedere ai parametri POST inviati in una richiesta da iPhone. Quando ho provato a stampare i valori dei parametri POST ho ottenuto "null" per ogni parametro.

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

Poi ho cercato di ottenere il corpo di una prossima richiesta, convertire il corpo in formato JSON e inviati indietro come una risposta per l'iPhone. Poi ho avuto i valori dei parametri ma sono in formato molto strano come segue:

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

Quindi una cosa di sicuro è parametri di richiesta POST stanno arrivando a questo file API. Sebbene non siano accessibili in $application->request->post(), entrano nel corpo della richiesta.

Il mio primo problema è come devo accedere a questi parametri POST dal corpo della richiesta e il mio secondo problema è perché i dati della richiesta vengono visualizzati in un formato così strano come sopra dopo aver convertito il corpo della richiesta in formato JSON?

Segue la necessaria frammento di codice:

<?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; 
?> 
+0

possibile duplicato di [Come ottenere l'entità richiesta POST utilizzando Slim framwork] (http://stackoverflow.com/questions/26346960/how-to-get-the-post-request-entity-using- slim-framwork) – guillermoandrae

risposta

28

In generale, è possibile accedere ai parametri POST singolarmente in uno dei due modi:

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

o

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

Altro informazioni sono disponibili nella documentazione: http://docs.slimframework.com/#Request-Variables

Quando JSON viene inviato in un POST, è necessario accedere alle informazioni dal corpo della richiesta, ad esempio:

$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 
}); 
+0

Ho provato con $ application-> request-> params ('paramName'); così come $ allPostVars = $ application-> request-> post ('paramName); ma ancora non ho ottenuto alcuna variabile richiesta POST. Solo dopo $ body = $ application-> request-> getBody(); Ricevo i dati della richiesta POST. –

+2

Ah capisco ora. Quindi questo è un duplicato di questo: http: // StackOverflow.it/questions/26346960/how-to-get-the-post-request-entity-using-slim-framwork – guillermoandrae

+2

Per esporre: devi solo usare 'json_decode' nel corpo della richiesta per analizzare la risposta e arrivare a l'informazione. – guillermoandrae

5

"Slim in grado di analizzare JSON, XML e dati con codifica URL fuori dalla scatola "- http://www.slimframework.com/docs/objects/request.html in" Il corpo della richiesta ".

Il modo più semplice per gestire una richiesta in qualsiasi forma del corpo è tramite "getParsedBody()". Questo farà esempio guillermoandrae ma il 1 linea anziché 2.

Esempio:

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

Quindi è possibile accedere eventuali parametri da loro chiave nell'array specificato.

$someVariable = $allPostVars['someVariable']; 
+0

Thx per questo, questo è davvero il modo più semplice. –

Problemi correlati