2009-11-19 5 views
5

Si l'on m'envoie un message HTTP où le corps de la requête http est juste une chaîne codée en UTF8, comment puis-je accéder à ces données dans mon contrôleur cakephp? Il semble que $ this-> params ne contient les éléments suivants:Comment gérer les données json envoyées en tant que HTTP Post à une application cakephp?

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

Les données affichées ressemble à ceci:

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

Répondre

7

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

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

C'est un codesnippet qui a été proposé d'être dans le noyau, voir https://trac.cakephp.org/ticket/6125. Peut-être que c'est ce que vous cherchez.

- Bjorn

+0

Bjorn, Merci pour la réponse. Il s'est avéré que mon problème n'était pas sur le gâteau, c'était le client POSTing les données. Ce n'était pas en train d'arriver au serveur. Merci pour votre aide si! Cameron – casper

3

Vous pouvez les utiliser façon la plus simple:

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

Je pense que c'est une meilleure solution que @ Bjorn. Simple et utilise la base de code CakePHP. –

Questions connexes