2010-05-16 17 views
12

Ricevo un payload JSON da un servizio web nella pagina Web interna del mio sito in/asset/setjob. Il seguente è il carico utile JSON viene inviato a/attività/SetJob:Ricevi payload JSON con framework ZEND e/o PHP

[{ "lavoro": { "nomefile_origine": "beer-drinking-pig.mpg", "CURRENT_STEP": "waiting_for_file" , "encoding_profile_id": "nullo", "risoluzione": "nullo", "STATUS_URL": "http://example.com/api/v1/jobs/1.json", "id": 1, "bitrate": "nullo", "CURRENT_STATUS": " in attesa di file ", " current_progress ":" nil ", " remote_id ":" my-own-remote-id "}}]

Questo payload invia una volta a questa pagina. La pagina non è pensata per la visualizzazione, ma analizzando l'oggetto JSON per l'id e current_status in modo che possa essere inserito in un database. Sto usando il framework Zend.

COME POSSO ricevere questo payload in Zend? Do I $ _GET ['json']? $ _POST [ 'lavoro']? Nessuno di questi sembra funzionare. In sostanza ho bisogno di assegnare questo payload a una variabile php in modo che possa quindi manipolarlo.

ho provato:

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

E ho provato: $ response = $ this-> getResponse(); $ body = $ response-> getBody();

Blockquote

Qualsiasi aiuto sarebbe molto apprezzato! Grazie.

+0

Qual è stato l'output di $ jsonStrGet = var_dump ($ _ GET); $ jsonStrPost = var_dump ($ _ POST); ? –

+0

Controlla la risposta a questa domanda: http://stackoverflow.com/questions/813487/how-to-post-json-to-php-with-curl –

risposta

0

Non sai cosa stai chiedendo, ma per convertire una stringa JSON in un oggetto, usa Zend_Json::decode($foo)?

1

Io non sono a conoscenza di come si utilizza ZF qui, ma per l'accesso ai parametri di richiesta, è necessario utilizzare

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

(See manual)

nel controller.

Poi, utilizzare Zend_Json::decode($var);

32

E 'possibile ottenere i dati di carico utile in questo modo (all'interno del vostro metodo di azione):

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

Il $ corpo conterrà la stringa JSON prime: [{ "lavoro" : {"source_filename": ...}] e la variabile $ data conterrà i dati JSON decodificati passati nel carico utile.

+0

Buona risposta, grazie :) –

+11

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

1

In seguito a ciò che @Saeven ha detto in precedenza per Zend Framework 2 avresti usato $ request-> getContent() con \ Zend \ Json \ Json :: decode. Ecco un esempio che ho usato per i test.

<?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); 
    } 
}