2010-05-16 8 views
12

Recibo una carga JSON de un servicio web en la página web interna de mi sitio en/asset/setjob. La siguiente es la carga útil JSON se registró a/activo/setjob:Reciba la carga JSON con el marco ZEND y/o PHP

[{ "trabajo": { "source_filename": "beber cerveza-pig.mpg", "CURRENT_STEP": "waiting_for_file" , "encoding_profile_id": "nulo", "resolución": "nulo", "status_url": "http://example.com/api/v1/jobs/1.json", "id": 1, "tasa de bits": "nulo", "CURRENT_STATUS": " esperando el archivo ", " actual_progress ":" nil ", " remote_id ":" mi-propio-ID remoto "}}]

Esta carga útil se publica una vez en esta página. La página no está pensada para ver, sino para analizar el objeto JSON para ID y current_status, de modo que pueda insertarlo en una base de datos. Estoy usando Zend framework.

¿CÓMO PUEDO recibir esta carga en Zend? ¿Tengo $ _GET ['json']? $ _POST ['trabajo']? Ninguno de estos parece funcionar. En esencia, necesito asignar esta carga a una variable php para poder manipularla.

He intentado:

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

Y lo he intentado: $ response = $ this-> getResponse(); $ cuerpo = $ respuesta-> getBody();

cita en bloque

Cualquier ayuda sería muy apreciada! Gracias.

+0

¿Cuál fue el resultado de $ jsonStrGet = var_dump ($ _ GET); $ jsonStrPost = var_dump ($ _ POST); ? –

+0

Compruebe la respuesta a esta pregunta: http://stackoverflow.com/questions/813487/how-to-post-json-to-php-with-curl –

Respuesta

0

No estoy seguro de lo que está preguntando, pero para convertir una cadena JSON en un objeto, use Zend_Json::decode($foo)?

1

No estoy al tanto de cómo se utiliza ZF aquí, pero para el acceso a los parámetros de la petición, es necesario utilizar

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

(See manual)

en su controlador.

A continuación, utilice Zend_Json::decode($var);

32

Es posible obtener datos de carga útil de esta manera (dentro de su método de acción):

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

El $ cuerpo contendrá su cadena JSON prima: [{ "trabajo" : {"source_filename": ...}] y $ data variable contendrán los datos JSON decodificados pasados ​​en la carga útil.

+0

Buena respuesta, gracias :) –

+11

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

1

Siguiendo con lo que @Saeven dijo anteriormente para Zend Framework 2, tendría que usar $ request-> getContent() con \ Zend \ Json \ Json :: decode. Aquí hay un ejemplo que usé para probar.

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