annotationReader = $annotationReader; } public function describe(Swagger $api, Route $route, \ReflectionMethod $reflectionMethod) { $annotation = $this->annotationReader->getMethodAnnotation($reflectionMethod, ApiDoc::class); if (null === $annotation) { return; } // some fields aren't available otherwise $annotationArray = $annotation->toArray(); foreach ($this->getOperations($api, $route) as $operation) { if ($annotation->getDescription()) { $operation->setDescription($annotation->getDescription()); } $operation->setDeprecated($operation->getDeprecated() || $annotation->getDeprecated()); // Request parameters foreach ($annotation->getParameters() as $name => $configuration) { $parameter = $operation->getParameters()->get($name, 'formData'); if (isset($configuration['required'])) { $parameter->setRequired($parameter->getRequired() || $configuration['required']); } $this->configureParameter($parameter, $configuration); } // Query parameters foreach ($annotation->getRequirements() as $name => $configuration) { $parameter = $operation->getParameters()->get($name, 'query'); $parameter->setRequired(true); $this->configureParameter($parameter, $configuration); } foreach ($annotation->getFilters() as $name => $configuration) { $parameter = $operation->getParameters()->get($name, 'query'); $this->configureParameter($parameter, $configuration); } // External docs if (isset($annotationArray['link'])) { $operation->getExternalDocs()->setUrl($annotationArray['link']); } // Responses if (isset($annotationArray['statusCodes'])) { $responses = $operation->getResponses(); foreach ($annotationArray['statusCodes'] as $statusCode => $description) { $response = $responses->get($statusCode); $response->setDescription($description); } } } } private function configureParameter(Parameter $parameter, array $configuration) { $dataType = null; if (isset($configuration['dataType'])) { $dataType = $configuration['dataType']; } elseif ($configuration['requirement']) { $dataType = $configuration['requirement']; } if ('[]' === substr($requirement, -2)) { $parameter->setType('array'); $items = $parameter; do { $items->setCollectionFormat('multi'); $requirement = substr($requirement, 0, -2); $items = $items->getItems(); } while ('[]' === substr($requirement, -2)); $items->setType(Swagger::T_STRING); $items->setFormat($requirement); } else { $parameter->setType(Swagger::T_STRING); $parameter->setFormat($requirement); } if (isset($configuration['description'])) { $parameter->setDescription($configuration['description']); } if (isset($configuration['default'])) { $parameter->setDefault($configuration['default']); } } }