$jsonContentType
$jsonContentType : boolean
Visitor used to apply a parameter to an array that will be serialized as a top level key-value pair in a JSON body
after(\Guzzle\Service\Command\CommandInterface $command, \Guzzle\Http\Message\RequestInterface $request)
Called after visiting all parameters
\Guzzle\Service\Command\CommandInterface | $command | Command being visited |
\Guzzle\Http\Message\RequestInterface | $request | Request being visited |
visit(\Guzzle\Service\Command\CommandInterface $command, \Guzzle\Http\Message\RequestInterface $request, \Guzzle\Service\Description\Parameter $param, mixed $value)
Called once for each parameter being visited that matches the location type
\Guzzle\Service\Command\CommandInterface | $command | Command being visited |
\Guzzle\Http\Message\RequestInterface | $request | Request being visited |
\Guzzle\Service\Description\Parameter | $param | Parameter being visited |
mixed | $value | Value to set |
setContentTypeHeader(string $header = 'application/json') : self
Set the Content-Type header to add to the request if JSON is added to the body. This visitor does not add a Content-Type header unless you specify one here.
string | $header | Header to set when JSON is added (e.g. application/json) |
prepareValue(mixed $value, \Guzzle\Service\Description\Parameter $param) : array|mixed
Prepare (filter and set desired name for request item) the value for request.
mixed | $value | |
\Guzzle\Service\Description\Parameter | $param |
resolveRecursively(array $value, \Guzzle\Service\Description\Parameter $param) : array
Map nested parameters into the location_key based parameters
array | $value | Value to map |
\Guzzle\Service\Description\Parameter | $param | Parameter that holds information about the current key |
Returns the mapped array
<?php
namespace Guzzle\Service\Command\LocationVisitor\Request;
use Guzzle\Http\Message\RequestInterface;
use Guzzle\Service\Command\CommandInterface;
use Guzzle\Service\Description\Parameter;
/**
* Visitor used to apply a parameter to an array that will be serialized as a top level key-value pair in a JSON body
*/
class JsonVisitor extends AbstractRequestVisitor
{
/** @var bool Whether or not to add a Content-Type header when JSON is found */
protected $jsonContentType = 'application/json';
/** @var \SplObjectStorage Data object for persisting JSON data */
protected $data;
public function __construct()
{
$this->data = new \SplObjectStorage();
}
/**
* Set the Content-Type header to add to the request if JSON is added to the body. This visitor does not add a
* Content-Type header unless you specify one here.
*
* @param string $header Header to set when JSON is added (e.g. application/json)
*
* @return self
*/
public function setContentTypeHeader($header = 'application/json')
{
$this->jsonContentType = $header;
return $this;
}
public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
{
if (isset($this->data[$command])) {
$json = $this->data[$command];
} else {
$json = array();
}
$json[$param->getWireName()] = $this->prepareValue($value, $param);
$this->data[$command] = $json;
}
public function after(CommandInterface $command, RequestInterface $request)
{
if (isset($this->data[$command])) {
// Don't overwrite the Content-Type if one is set
if ($this->jsonContentType && !$request->hasHeader('Content-Type')) {
$request->setHeader('Content-Type', $this->jsonContentType);
}
$request->setBody(json_encode($this->data[$command]));
unset($this->data[$command]);
}
}
}