kent3800
kent3800

Reputation: 171

Receive JSON payload with ZEND framework and / or PHP

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.

Upvotes: 17

Views: 18759

Answers (4)

tophstar
tophstar

Reputation: 75

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

Upvotes: 4

ischenkodv
ischenkodv

Reputation: 4255

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.

Upvotes: 39

Kevin Sedgley
Kevin Sedgley

Reputation: 1069

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

Upvotes: 0

Boris Gu&#233;ry
Boris Gu&#233;ry

Reputation: 47585

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

Upvotes: 1

Related Questions