/** * {@inheritDoc} */ public function extract(ActionInterface $action, CallableInterface $callable) { $reflection = $callable->getReflection(); $methodParameters = $reflection->getParameters(); $parameters = []; foreach ($methodParameters as $methodParameter) { $defaultValue = null; if ($methodParameter->isOptional()) { $defaultValue = $methodParameter->getDefaultValue(); } $name = $methodParameter->getName(); $parameters[] = new Parameter($name, 'string', !$methodParameter->isOptional(), null, $defaultValue); } return $parameters; }
/** * Resolve request parameter * * @param ActionInterface $action * @param CallableInterface $callable * @param array $inputArguments * @param \ReflectionParameter $parameter * * @return object * * @throws \Exception */ private function resolveRequest(ActionInterface $action, CallableInterface $callable, array $inputArguments, \ReflectionParameter $parameter) { $class = $parameter->getClass(); if ($class->isInterface()) { throw new \RuntimeException(sprintf('Could not create instance via interface for parameter "%s" in method "%s". ' . 'You must set the class for type hinting.', $parameter->getName(), Reflection::getCalledMethod($callable->getReflection()))); } if ($class->isAbstract()) { throw new \RuntimeException(sprintf('Could not create instance via abstract class for parameter "%s" in method "%s". ' . 'You must set the real class for type hinting.', $parameter->getName(), Reflection::getCalledMethod($callable->getReflection()))); } /** @var RequestInterface $request */ $request = $class->newInstance(); // Map arguments $this->objectMapper->map($request, $inputArguments, ObjectMetadata::DEFAULT_GROUP); // Validate process if ($this->validator) { if ($this->validator instanceof VarTagValidatorInterface) { $violationList = $this->validator->validateObjectByVarTags($request); if (count($violationList)) { throw ViolationListException::create($violationList); } } $violationList = $this->validator->validate($request); if (count($violationList)) { throw ViolationListException::create($violationList); } } return $request; }