/** * {@inheritdoc} */ public function parse(CommandInterface $command) { $response = $command->getRequest()->getResponse(); // Account for hard coded content-type values specified in service descriptions if ($contentType = $command->get('command.expects')) { $response->setHeader('Content-Type', $contentType); } else { $contentType = (string) $response->getHeader('Content-Type'); } return $this->parseForContentType($command, $response, $contentType); }
/** * {@inheritdoc} */ public function prepare(CommandInterface $command) { $operation = $command->getOperation(); $client = $command->getClient(); $uri = $operation->getUri(); if (!$uri) { $url = $client->getBaseUrl(); } else { // Get the path values and use the client config settings $variables = $client->getConfig()->getAll(); foreach ($operation->getParams() as $name => $arg) { if ($arg->getLocation() == 'uri' && $command->hasKey($name)) { $variables[$name] = $command->get($name); if (!is_array($variables[$name])) { $variables[$name] = (string) $variables[$name]; } } } // Merge the client's base URL with an expanded URI template $url = (string) Url::factory($client->getBaseUrl())->combine(ParserRegistry::getInstance()->getParser('uri_template')->expand($uri, $variables)); } // Inject path and base_url values into the URL $request = $client->createRequest($operation->getHttpMethod(), $url); // Add arguments to the request using the location attribute foreach ($operation->getParams() as $name => $arg) { /** @var $arg \Guzzle\Service\Description\Parameter */ $location = $arg->getLocation(); // Visit with the associated visitor if (isset($this->visitors[$location])) { // Ensure that a value has been set for this parameter $value = $command->get($name); if ($value !== null) { // Apply the parameter value with the location visitor $this->visitors[$location]->visit($command, $request, $arg, $value); } } } // Call the after method on each visitor foreach ($this->visitors as $visitor) { $visitor->after($command, $request); } return $request; }
/** * Create a request for the command and operation * * @param CommandInterface $command Command to create a request for * * @return RequestInterface */ protected function createRequest(CommandInterface $command) { $operation = $command->getOperation(); $client = $command->getClient(); // If the command does not specify a template, then assume the base URL of the client if (!($uri = $operation->getUri())) { return $client->createRequest($operation->getHttpMethod(), $client->getBaseUrl()); } // Get the path values and use the client config settings $variables = array(); foreach ($operation->getParams() as $name => $arg) { if ($arg->getLocation() == 'uri') { if ($command->hasKey($name)) { $variables[$name] = $arg->filter($command->get($name)); if (!is_array($variables[$name])) { $variables[$name] = (string) $variables[$name]; } } } } // Merge the client's base URL with an expanded URI template return $client->createRequest($operation->getHttpMethod(), (string) Url::factory($client->getBaseUrl())->combine(ParserRegistry::getInstance()->getParser('uri_template')->expand($uri, $variables))); }
/** * Determines whether a command's response type is a model * * @param \Guzzle\Service\Command\AbstractCommand $command * * @return boolean */ public function responseTypeIsModel(CommandInterface $command) { if (!$command instanceof AbstractCommand) { return false; } $operation = $command->getOperation(); $processing = $command->get(AbstractCommand::RESPONSE_PROCESSING); $description = $operation->getServiceDescription(); return $operation->getResponseType() == OperationInterface::TYPE_MODEL && $description->hasModel($operation->getResponseClass()) && $processing == AbstractCommand::TYPE_MODEL; }