/** * {@inheritdoc} * * Overridden to behave differently for the "links" location */ public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value) { if ($param->getLocation() === 'links') { $this->addLinkParam($command, $param); $this->addLinkValue($command, $param, $value); } else { $component = $this->getDecoratedComponent(); return $component->visit($command, $request, $param, $value); } }
protected function prepareAdditionalParameters(OperationInterface $operation, CommandInterface $command, RequestInterface $request, Parameter $additional) { if (!($location = $additional->getLocation())) { return; } $visitor = $this->factory->getRequestVisitor($location); $hidden = $command[$command::HIDDEN_PARAMS]; foreach ($command->toArray() as $key => $value) { if ($value !== null && !in_array($key, $hidden) && !$operation->hasParam($key)) { $additional->setName($key); $visitor->visit($command, $request, $additional, $value); } } return $visitor; }
/** * Serialize additional parameters * * @param OperationInterface $operation Operation that owns the command * @param CommandInterface $command Command to prepare * @param RequestInterface $request Request to serialize * @param Parameter $additional Additional parameters * * @return null|RequestVisitorInterface */ protected function prepareAdditionalParameters(OperationInterface $operation, CommandInterface $command, RequestInterface $request, Parameter $additional) { if (!($location = $additional->getLocation())) { return; } $visitor = $this->factory->getRequestVisitor($location); foreach ($command->getAll() as $key => $value) { // Ignore values that are null or built-in command options if ($value !== null && $key != 'command.headers' && $key != 'command.response_processing' && !$operation->hasParam($key)) { $additional->setName($key); $visitor->visit($command, $request, $additional, $value); } } return $visitor; }
protected function visitAdditionalProperties(Parameter $model, CommandInterface $command, Response $response, Parameter $additional, &$result, array &$foundVisitors) { // Only visit when a location is specified if ($location = $additional->getLocation()) { if (!isset($foundVisitors[$location])) { $foundVisitors[$location] = $this->factory->getResponseVisitor($location); $foundVisitors[$location]->before($command, $result); } // Only traverse if an array was parsed from the before() visitors if (is_array($result)) { // Find each additional property foreach (array_keys($result) as $key) { // Check if the model actually knows this property. If so, then it is not additional if (!$model->getProperty($key)) { // Set the name to the key so that we can parse it with each visitor $additional->setName($key); $foundVisitors[$location]->visit($command, $response, $additional, $result); } } // Reset the additionalProperties name to null $additional->setName(null); } } }
public function testCanBuildUpParams() { $p = new Parameter(array()); $p->setName('foo')->setDescription('c')->setFilters(array('d'))->setLocation('e')->setSentAs('f')->setMaxLength(1)->setMinLength(1)->setMinimum(2)->setMaximum(2)->setMinItems(3)->setMaxItems(3)->setRequired(true)->setStatic(true)->setDefault('h')->setType('i'); $p->addFilter('foo'); $this->assertEquals('foo', $p->getName()); $this->assertEquals('h', $p->getDefault()); $this->assertEquals('c', $p->getDescription()); $this->assertEquals(array('d', 'foo'), $p->getFilters()); $this->assertEquals('e', $p->getLocation()); $this->assertEquals('f', $p->getSentAs()); $this->assertEquals(1, $p->getMaxLength()); $this->assertEquals(1, $p->getMinLength()); $this->assertEquals(2, $p->getMaximum()); $this->assertEquals(2, $p->getMinimum()); $this->assertEquals(3, $p->getMaxItems()); $this->assertEquals(3, $p->getMinItems()); $this->assertEquals(true, $p->getRequired()); $this->assertEquals(true, $p->getStatic()); $this->assertEquals('i', $p->getType()); }
protected function visitAdditionalProperties( Parameter $model, CommandInterface $command, Response $response, Parameter $additional, &$result, array &$foundVisitors ) { if ($location = $additional->getLocation()) { if (!isset($foundVisitors[$location])) { $foundVisitors[$location] = $this->factory->getResponseVisitor($location); $foundVisitors[$location]->before($command, $result); } if (is_array($result)) { foreach (array_keys($result) as $key) { if (!$model->getProperty($key)) { $additional->setName($key); $foundVisitors[$location]->visit($command, $response, $additional, $result); } } $additional->setName(null); } } }