jsonContentType = $contentType; } /** * @param CommandInterface $command * @param RequestInterface $request * @param Parameter $param * * @return RequestInterface */ public function visit( CommandInterface $command, RequestInterface $request, Parameter $param ) { $this->jsonData[$param->getWireName()] = $this->prepareValue( $command[$param->getName()], $param ); return $request->withBody(Psr7\Utils::streamFor(Utils::jsonEncode($this->jsonData))); } /** * @param CommandInterface $command * @param RequestInterface $request * @param Operation $operation * * @return MessageInterface */ public function after( CommandInterface $command, RequestInterface $request, Operation $operation ) { $data = $this->jsonData; $this->jsonData = []; // Add additional parameters to the JSON document $additional = $operation->getAdditionalParameters(); if ($additional && ($additional->getLocation() === $this->locationName)) { foreach ($command->toArray() as $key => $value) { if (!$operation->hasParam($key)) { $data[$key] = $this->prepareValue($value, $additional); } } } // Don't overwrite the Content-Type if one is set if ($this->jsonContentType && !$request->hasHeader('Content-Type')) { $request = $request->withHeader('Content-Type', $this->jsonContentType); } return $request->withBody(Psr7\Utils::streamFor(Utils::jsonEncode($data))); } }