2009-11-19 8 views
5

Se mi viene inviato un post HTTP in cui il corpo della richiesta http è solo una stringa codificata UTF8, come posso accedere a quei dati nel mio controller cakephp? Sembra che $ this-> params contiene solo le seguenti:Come si gestiscono i dati JSON inviati come post HTTP a un'applicazione cakephp?

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

i dati da inviare simile a questa:

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

risposta

7

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

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

Questo è un codesnippet che è stato proposto per essere nel nucleo, vedi https://trac.cakephp.org/ticket/6125. Forse è quello che stai cercando.

- Bjorn

+0

Bjorn, Grazie per la risposta. Si scopre che il mio problema non era il lato positivo delle cose, era il client che inviava i dati. In realtà non stava arrivando al server. Grazie per il tuo aiuto! Cameron – casper

3

È possibile utilizzare questi modo più semplice:

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

Penso che questa sia una soluzione migliore di quella di @ Bjorn. Semplice e utilizza la base di codice CakePHP. –

Problemi correlati