2010-05-16 21 views
12

Tôi nhận được tải trọng JSON từ một dịch vụ web tại trang web nội bộ của trang web của tôi tại/asset/setjob. Sau đây là tải trọng JSON được đưa lên/tài sản/setjob:Nhận tải trọng JSON với khung công tác ZEND và/hoặc PHP

[{ "công việc": { "source_filename": "uống bia-pig.mpg", "CURRENT_STEP": "waiting_for_file" , "encoding_profile_id": "con số không", "độ phân giải" : "nil", "STATUS_URL": "http://example.com/api/v1/jobs/1.json", "id": 1, "bitrate": "nil", "CURRENT_STATUS": " đang chờ tệp ", " current_progress ":" nil ", " remote_id ":" my-own-remote-id "}}]

Tải trọng này đăng một lần lên trang này. Trang này không có nghĩa là để xem nhưng phân tích cú pháp đối tượng JSON cho id và current_status để tôi có thể chèn nó vào cơ sở dữ liệu. Tôi đang sử dụng khung công tác Zend.

Làm cách nào để nhận tải trọng này trong Zend? Tôi có phải $ _GET ['json'] không? $ _POST ['công việc']? Không ai trong số này dường như làm việc. Về cơ bản, tôi cần gán trọng tải này cho biến php để tôi có thể thao tác nó.

Tôi đã thử:

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

Và tôi đã cố gắng: $ phản ứng = $ this-> getResponse(); $ body = $ response-> getBody();

Blockquote

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao! Cảm ơn.

+0

Đầu ra của $ jsonStrGet = var_dump ($ _ GET) là gì; $ jsonStrPost = var_dump ($ _ POST); ? –

+0

Kiểm tra câu trả lời cho câu hỏi này: http://stackoverflow.com/questions/813487/how-to-post-json-to-php-with-curl –

Trả lời

0

Không chắc chắn bạn đang yêu cầu gì, nhưng để chuyển đổi chuỗi JSON thành đối tượng, hãy sử dụng Zend_Json::decode($foo)?

1

Tôi không biết về cách bạn sử dụng ZF ở đây, nhưng để tiếp cận với các thông số yêu cầu, bạn cần phải sử dụng

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

(See manual)

trong điều khiển của bạn.

Sau đó, sử Zend_Json::decode($var);

32

Có thể để lấy dữ liệu tải trọng theo cách này (bên trong phương pháp hành động của bạn):

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

Các $ cơ thể sẽ chứa chuỗi JSON liệu của bạn: [{ "công việc" : {"source_filename": ...}] và $ data variable sẽ chứa dữ liệu JSON được giải mã được truyền tải trong tải trọng.

+0

Câu trả lời hay, cảm ơn :) –

+11

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

1

Theo dõi những gì @Saeven đã nói ở trên cho Zend Framework 2, bạn sẽ phải sử dụng $ request-> getContent() với \ Zend \ Json \ Json :: decode. Đây là một ví dụ tôi đã sử dụng để thử nghiệm.

<?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); 
    } 
} 
Các vấn đề liên quan