2010-05-16 14 views
12

ile JSON yükünü alın. Sitemin web sitesindeki/asset/setjob sayfasındaki bir web servisinden bir JSON yükü alıyorum.ZEND çerçevesi ve/veya PHP

[{ "iş": { "source_filename": "bira içen-pig.mpg", "CURRENT_STEP": "waiting_for_file" JSON yükü/varlık/setjob gönderilen ediliyor aşağıdaki , "encoding_profile_id": "sıfır", "çözünürlük": "sıfır", "STATUS_URL": "http://example.com/api/v1/jobs/1.json", "kimlik": 1, "bit": "sıfır", "CURRENT_STATUS": " ", " current_progress ":" nil ", " remote_id ":" benim-kendi-uzaktan-kimliği "}}]]

Bu yük, bu sayfaya bir kez gönderilmektedir. Sayfa, görüntüleme için değil, JSON nesnesini id ve current_status için ayrıştırmak amacıyla kullanılmaz, böylece bir veritabanına ekleyebilirim. Zend çerçevesini kullanıyorum.

Bu yükü Zend'de nasıl alabilirim? $ _GET ['json'] muyum? $ _POST [ 'iş']? Bunların hiçbiri işe yaramıyor. Bu yükü bir php değişkenine atamam gerek, böylece onu manipüle edebilirim.

denedim:

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

Ayrıca denedim: $ response = $ this-> getResponse(); $ body = $ response-> getBody();

Blockquote

Herhangi bir yardım çok takdir! Teşekkürler.

+0

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

+0

Bu sorunun cevabını kontrol edin: http://stackoverflow.com/questions/813487/how-to-post-json-to-php-with-curl –

cevap

0

Sorduğunuzdan emin değilsiniz, ancak bir JSON dizesini bir nesneye dönüştürmek için Zend_Json::decode($foo) kullanın?

1

Burada ZF nasıl kullandıklarını farkında değilim, fakat bu talep parametrelerine erişmek için, kendi denetleyicisi

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

(See manual)

kullanmak gerekir.

Sonra Zend_Json::decode($var);

32

kullanmak O (eylem yöntemi içinde) bu şekilde yük verilerini almak mümkündür:

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

$ vücut ham JSON dizesi içerir: [{ "işi" : {"source_filename": ...}] ve $ data değişkeni, yükte geçirilen kod çözülmüş JSON verilerini içerecektir.

+0

İyi cevap, teşekkürler :) –

+11

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

1

@Saeven, Zend Framework 2 için yukarıda belirtilenleri takip ettiğinde, \ Zend \ Json \ Json :: decode ile $ request-> getContent() öğesini kullanırdınız. İşte test için kullandığım bir örnek.

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