2010-05-16 7 views
12

Ich erhalte eine JSON-Nutzlast von einem Webservice auf der internen Webseite meiner Site unter/asset/setjob. Das Folgende ist die JSON Nutzlast geschrieben werden/Asset/setjob:Empfangen von JSON-Nutzdaten mit ZEND Framework und/oder PHP

[{ "Job": { "Quelle_Dateiname": "Bier-Trink pig.mpg", "CURRENT_STEP": "waiting_for_file" , "encoding_profile_id": "nil" "Auflösung": "nil" "STATUS_URL": "http://example.com/api/v1/jobs/1.json" "id": 1, "Bitrate": "nil" "CURRENT_STATUS": " warten auf Datei“, "current_progress": "Null", "remote_id": "my-own-remote-id"}}]

Diese Nutzdaten werden einmal auf dieser Seite veröffentlicht. Die Seite ist nicht zum Anzeigen gedacht, sondern zum syntaktischen Analysieren des JSON-Objekts für die ID und den current_status, damit ich sie in eine Datenbank einfügen kann. Ich benutze Zend Framework.

Wie bekomme ich diese Nutzlast in Zend? Habe ich $ _GET ['json']? $ _POST ['Job']? Keines davon scheint zu funktionieren. Ich muss diese Payload im Wesentlichen einer PHP-Variable zuweisen, damit ich sie dann manipulieren kann.

Ich habe versucht:

$ jsonStrGet = var_dump ($ _ GET); $ jsonStrPost = var_dump ($ _ POST);

Und ich habe es versucht: $ response = $ this-> getResponse(); $ body = $ response-> getBody();

Blockquote

Jede Hilfe sehr geschätzt werden würde! Vielen Dank.

+0

Was war die Ausgabe von $ jsonStrGet = var_dump ($ _ GET); $ jsonStrPost = var_dump ($ _ POST); ? –

+0

Überprüfen Sie die Antwort auf diese Frage: http://stackoverflow.com/questions/813487/how-to-post-json-to-php-with-curl –

Antwort

0

Nicht sicher, was Sie fragen, aber eine JSON-Zeichenfolge in ein Objekt zu konvertieren, verwenden Sie Zend_Json::decode($foo)?

1

Ich bin mir nicht bewusst, wie Sie ZF verwenden hier, sondern um den Zugriff auf Anforderungsparameter, müssen Sie

$this->getParams() or $this->getParam('yourvar'); 

(See manual)

in Ihrem Controller verwenden.

Dann verwenden Zend_Json::decode($var);

32

Es ist möglich, Nutzdaten auf diese Weise (in Ihrer Action-Methode) zu erhalten:

$body = $this->getRequest()->getRawBody(); 
$data = Zend_Json::decode($body); 

Die $ Körper enthält Ihren RAW-JSON-String: [{ "job" : {"source_filename": ...}] und $ data-Variable enthalten dekodierte JSON-Daten, die in Payload übergeben werden.

+0

Gute Antwort, danke :) –

+11

ZF2: '$ this-> Anfrage-> getContent(); ' – Saeven

1

Im Anschluss an das, was oben für Zend Framework 2 gesagt wurde, würden Sie $ request-> getContent() mit \ Zend \ Json \ Json :: decode verwenden. Hier ist ein Beispiel, das ich zum Testen verwendet habe.

<?php 

namespace Rsvp\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 
use Zend\View\Model\JsonModel; 

class RsvpController extends AbstractActionController{ 

    public function getAccessTokenAction() { 
     $request = $this->getRequest(); 

     $result = array('status' => 'error', 'message' => 'There was some error. Try again.', 'isXmlHTTP' => $request->isXmlHttpRequest()); 

     if($request->isXmlHttpRequest()){ 
      $data = \Zend\Json\Json::decode($request->getContent()); 

      if(isset($data->token) && !empty($data->token)){ 
       $result['status'] = 'success'; 
       $result['accessToken'] = '1234'; 
       $result['message'] = ''; 
      } 
     } 

     return new JsonModel($result); 
    } 
}