2009-11-19 11 views
5

Si recibo una publicación HTTP donde el cuerpo de la solicitud http es solo una cadena codificada en UTF8, ¿cómo puedo acceder a esos datos en mi controlador cakephp? Parece que $ this-> params solamente contiene lo siguiente:¿Cómo manejo los datos json enviados como una publicación HTTP a una aplicación cakephp?

{ 
    "pass":[], 
    "named":[], 
    "controller":"users", 
    "action":"checkin", 
    "plugin":null, 
    "url":{ 
     "ext":"json", 
     "url":"users\/checkin.json" 
    }, 
    "form":[], 
    "isAjax":false 
} 

Los datos que se publiquen se ve algo como esto:

{ 
    "sessionkey":"somecrazykey", 
    "longitude":"-111.12345", 
    "latitude":"33.12345", 
    "reqtype":"checkin", 
    "location":"the mall", 
    "public":"true" 
} 

Respuesta

7

if ($ this-> RequestHandler-> requestedWith ('json')) { if (function_exists ('json_decode')) { $ jsonData = json_decode (utf8_encode (trim (file_get_contents ('php: // input'))), true); }

if(!is_null($jsonData) and $jsonData !== false) { 
     $this->data = $jsonData; 
    } 
} 

Esta es una codesnippet que fue propuesto para estar en el núcleo, ver https://trac.cakephp.org/ticket/6125. Tal vez es lo que estás buscando.

- Bjorn

+0

Bjorn, Gracias por la respuesta. Resultó que mi problema no estaba en el lado de la torta, era el cliente POSTING de los datos. En realidad, no estaba llegando al servidor. ¡Gracias por su ayuda! Cameron – casper

3

Usted puede utilizar estas forma más sencilla:

$data = $this->request->input ('json_decode', true) ; 
+0

Creo que esta es una solución mejor que la de @Bjorn. Simple y usa la base de código de CakePHP. –

Cuestiones relacionadas