/** * {@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))); }