17

I'm receiving a JSON payload from a webservice at my site's internal webpage at /asset/setjob. The following is the JSON payload being posted to /asset/setjob:

[{"job": {"source_filename": "beer-drinking-pig.mpg", "current_step": "waiting_for_file", "encoding_profile_id": "nil", "resolution": "nil", "status_url": "http://example.com/api/v1/jobs/1.json", "id": 1, "bitrate": "nil", "current_status": "waiting for file", "current_progress": "nil", "remote_id": "my-own-remote-id"}}]

This payload posts one time to this page. The page is not meant for viewing but parsing the JSON object for the id and current_status so that I can insert it into a database. I'm using Zend framework.

HOW DO I receive this payload in Zend? Do I $_GET['json']? $_POST['job']? None of these seem to work. I essentially need to assign this payload to a php variable so that I can then manipulate it.

I've tried:

$jsonStrGet = var_dump($_GET); $jsonStrPost = var_dump($_POST);

And I've tried: $response = $this->getResponse(); $body = $response->getBody();

Blockquote

Any help would be much appreciated! Thanks.

Charles
  • 50,943
  • 13
  • 104
  • 142
kent3800
  • 171
  • 1
  • 1
  • 3

4 Answers4

39

It is possible to get payload data this way (inside your action method):

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

The $body will contain your raw JSON string: [{"job": {"source_filename": ...}] and $data variable will contain decoded JSON data passed in payload.

ischenkodv
  • 4,205
  • 2
  • 26
  • 34
4

Following up on what @Saeven said above for Zend Framework 2 you would have use $request->getContent() with \Zend\Json\Json::decode. Here's an example I used for testing.

<?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(!empty($data->token)){
                $result['status'] = 'success';
                $result['accessToken'] = '1234';
               $result['message'] = '';
            }
        }
    
        return new JsonModel($result);
    }
}
Janaka R Rajapaksha
  • 3,585
  • 1
  • 25
  • 28
tophstar
  • 75
  • 1
  • 9
1

I'm not aware of how you use ZF here, but to access to request parameters, you need to use

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

(See manual)

in your controller.

Then, use Zend_Json::decode($var);

Boris Guéry
  • 47,316
  • 8
  • 52
  • 87
0

Not sure what you are asking, but to convert a JSON string into an object, use Zend_Json::decode($foo)?

Boris Guéry
  • 47,316
  • 8
  • 52
  • 87
Kevin Sedgley
  • 1,049
  • 1
  • 11
  • 22