Merge pull request #1294 from Hexanet/fix-link-unlink-methods

Ignore unsupported HTTP methods
This commit is contained in:
Guilhem N 2018-04-20 18:57:39 +02:00 committed by GitHub
commit 1680ba3481
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 3 deletions

View File

@ -95,6 +95,7 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI
new Reference(sprintf('nelmio_api_doc.routes.%s', $area)),
new Reference('nelmio_api_doc.controller_reflector'),
new Reference('annotation_reader'),
new Reference('logger'),
])
->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => -200]);
}

View File

@ -18,6 +18,7 @@ use Nelmio\ApiDocBundle\Annotation\Security;
use Nelmio\ApiDocBundle\SwaggerPhp\AddDefaults;
use Nelmio\ApiDocBundle\SwaggerPhp\ModelRegister;
use Nelmio\ApiDocBundle\Util\ControllerReflector;
use Psr\Log\LoggerInterface;
use Swagger\Analysis;
use Swagger\Annotations\AbstractAnnotation;
use Swagger\Annotations as SWG;
@ -31,13 +32,15 @@ final class SwaggerPhpDescriber implements ModelRegistryAwareInterface
private $routeCollection;
private $controllerReflector;
private $annotationReader;
private $logger;
private $overwrite;
public function __construct(RouteCollection $routeCollection, ControllerReflector $controllerReflector, Reader $annotationReader, bool $overwrite = false)
public function __construct(RouteCollection $routeCollection, ControllerReflector $controllerReflector, Reader $annotationReader, LoggerInterface $logger, bool $overwrite = false)
{
$this->routeCollection = $routeCollection;
$this->controllerReflector = $controllerReflector;
$this->annotationReader = $annotationReader;
$this->logger = $logger;
$this->overwrite = $overwrite;
}
@ -215,8 +218,18 @@ final class SwaggerPhpDescriber implements ModelRegistryAwareInterface
$path = $this->normalizePath($route->getPath());
$httpMethods = $route->getMethods() ?: Swagger::$METHODS;
$httpMethods = array_map('strtolower', $httpMethods);
$supportedHttpMethods = array_intersect($httpMethods, Swagger::$METHODS);
yield $method => [$path, $httpMethods];
if (empty($supportedHttpMethods)) {
$this->logger->warning('None of the HTTP methods specified for path {path} are supported by swagger-ui, skipping this path', [
'path' => $path,
'methods' => $httpMethods,
]);
continue;
}
yield $method => [$path, $supportedHttpMethods];
}
}
}

View File

@ -44,7 +44,9 @@ class ApiController
}
/**
* @Route("/swagger", methods={"GET"})
* The method LINK is not supported by OpenAPI so the method will be ignored.
*
* @Route("/swagger", methods={"GET", "LINK"})
* @Route("/swagger2", methods={"GET"})
* @Operation(
* @SWG\Response(response="201", description="An example resource")