annotationReader = $annotationReader; } public function describe(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod) { $annotations = $this->annotationReader->getMethodAnnotations($reflectionMethod); $annotations = array_filter($annotations, function ($value) { return $value instanceof RequestParam || $value instanceof QueryParam; }); foreach ($this->getOperations($api, $route) as $operation) { foreach ($annotations as $annotation) { $in = $annotation instanceof QueryParam ? 'query' : 'formData'; $parameter = $operation->getParameters()->get($annotation->getName(), $in); $parameter->setAllowEmptyValue($annotation->nullable && $annotation->allowBlank); $parameter->setType($annotation->map ? 'array' : 'string'); $parameter->setDefault($annotation->getDefault()); if (null === $parameter->getDescription()) { $parameter->setDescription($annotation->description); } $normalizedRequirements = $this->normalizeRequirements($annotation->requirements); if (null !== $normalizedRequirements) { $parameter->setFormat($normalizedRequirements); } } } } private function normalizeRequirements($requirements) { // if pattern if (isset($requirements['rule'])) { return (string) $requirements['rule']; } if (is_string($requirements)) { return $requirements; } // if custom constraint if ($requirements instanceof Constraint) { if ($requirements instanceof Regex) { return $requirements->getHtmlPattern(); } $reflectionClass = new \ReflectionClass($requirements); return $reflectionClass->getShortName(); } } }