From 181f4b276356f34ea307b5d44ec7ff6cc189ea27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zdene=CC=8Ck=20Drahos=CC=8C?= Date: Thu, 29 Jul 2021 12:11:10 +0200 Subject: [PATCH] Keep server_url from Request only in RenderOpenApi --- Controller/DocumentationController.php | 4 +--- Controller/SwaggerUiController.php | 3 +-- Controller/YamlDocumentationController.php | 4 +--- Render/Html/HtmlOpenApiRenderer.php | 13 +------------ Render/Json/JsonOpenApiRenderer.php | 6 ------ Render/RenderOpenApi.php | 19 +++++++++++++++++++ Render/Yaml/YamlOpenApiRenderer.php | 9 --------- 7 files changed, 23 insertions(+), 35 deletions(-) diff --git a/Controller/DocumentationController.php b/Controller/DocumentationController.php index 4374bb2..020451a 100644 --- a/Controller/DocumentationController.php +++ b/Controller/DocumentationController.php @@ -32,9 +32,7 @@ final class DocumentationController { try { return JsonResponse::fromJsonString( - $this->renderOpenApi->render(RenderOpenApi::JSON, $area, [ - 'server_url' => '' !== $request->getBaseUrl() ? $request->getSchemeAndHttpHost().$request->getBaseUrl() : null, - ]) + $this->renderOpenApi->renderFromRequest($request, RenderOpenApi::JSON, $area) ); } catch (InvalidArgumentException $e) { throw new BadRequestHttpException(sprintf('Area "%s" is not supported as it isn\'t defined in config.', $area)); diff --git a/Controller/SwaggerUiController.php b/Controller/SwaggerUiController.php index 1d4cca4..c5a3201 100644 --- a/Controller/SwaggerUiController.php +++ b/Controller/SwaggerUiController.php @@ -34,8 +34,7 @@ final class SwaggerUiController { try { $response = new Response( - $this->renderOpenApi->render(RenderOpenApi::HTML, $area, [ - 'server_url' => '' !== $request->getBaseUrl() ? $request->getSchemeAndHttpHost().$request->getBaseUrl() : null, + $this->renderOpenApi->renderFromRequest($request, RenderOpenApi::HTML, $area, [ 'assets_mode' => AssetsMode::BUNDLE, ]), Response::HTTP_OK, diff --git a/Controller/YamlDocumentationController.php b/Controller/YamlDocumentationController.php index ef9bc36..a935a2d 100644 --- a/Controller/YamlDocumentationController.php +++ b/Controller/YamlDocumentationController.php @@ -33,9 +33,7 @@ final class YamlDocumentationController { try { $response = new Response( - $this->renderOpenApi->render(RenderOpenApi::YAML, $area, [ - 'server_url' => '' !== $request->getBaseUrl() ? $request->getSchemeAndHttpHost().$request->getBaseUrl() : null, - ]), + $this->renderOpenApi->renderFromRequest($request, RenderOpenApi::YAML, $area), Response::HTTP_OK, ['Content-Type' => 'text/x-yaml'] ); diff --git a/Render/Html/HtmlOpenApiRenderer.php b/Render/Html/HtmlOpenApiRenderer.php index bedf14e..88cb7d1 100644 --- a/Render/Html/HtmlOpenApiRenderer.php +++ b/Render/Html/HtmlOpenApiRenderer.php @@ -15,7 +15,6 @@ use InvalidArgumentException; use Nelmio\ApiDocBundle\Render\OpenApiRenderer; use Nelmio\ApiDocBundle\Render\RenderOpenApi; use OpenApi\Annotations\OpenApi; -use OpenApi\Annotations\Server; use Twig\Environment; class HtmlOpenApiRenderer implements OpenApiRenderer @@ -43,7 +42,6 @@ class HtmlOpenApiRenderer implements OpenApiRenderer public function render(OpenApi $spec, array $options = []): string { $options += [ - 'server_url' => null, 'assets_mode' => AssetsMode::CDN, 'swagger_ui_config' => [], ]; @@ -53,19 +51,10 @@ class HtmlOpenApiRenderer implements OpenApiRenderer return $this->twig->render( '@NelmioApiDoc/SwaggerUi/index.html.twig', [ - 'swagger_data' => ['spec' => $this->createJsonSpec($spec, $options['server_url'])], + 'swagger_data' => ['spec' => json_decode($spec->toJson(), true)], 'assets_mode' => $options['assets_mode'], 'swagger_ui_config' => $options['swagger_ui_config'], ] ); } - - private function createJsonSpec(OpenApi $spec, $serverUrl) - { - if ($serverUrl) { - $spec->servers = [new Server(['url' => $serverUrl])]; - } - - return json_decode($spec->toJson(), true); - } } diff --git a/Render/Json/JsonOpenApiRenderer.php b/Render/Json/JsonOpenApiRenderer.php index a5da3c9..09af9e1 100644 --- a/Render/Json/JsonOpenApiRenderer.php +++ b/Render/Json/JsonOpenApiRenderer.php @@ -14,7 +14,6 @@ namespace Nelmio\ApiDocBundle\Render\Json; use Nelmio\ApiDocBundle\Render\OpenApiRenderer; use Nelmio\ApiDocBundle\Render\RenderOpenApi; use OpenApi\Annotations\OpenApi; -use OpenApi\Annotations\Server; class JsonOpenApiRenderer implements OpenApiRenderer { @@ -26,15 +25,10 @@ class JsonOpenApiRenderer implements OpenApiRenderer public function render(OpenApi $spec, array $options = []): string { $options += [ - 'server_url' => null, 'no-pretty' => false, ]; $flags = $options['no-pretty'] ? 0 : JSON_PRETTY_PRINT; - if ($options['server_url']) { - $spec->servers = [new Server(['url' => $options['server_url']])]; - } - return json_encode($spec, $flags); } } diff --git a/Render/RenderOpenApi.php b/Render/RenderOpenApi.php index 8076d49..46b1ae1 100644 --- a/Render/RenderOpenApi.php +++ b/Render/RenderOpenApi.php @@ -13,7 +13,9 @@ namespace Nelmio\ApiDocBundle\Render; use InvalidArgumentException; use OpenApi\Annotations\OpenApi; +use OpenApi\Annotations\Server; use Psr\Container\ContainerInterface; +use Symfony\Component\HttpFoundation\Request; class RenderOpenApi { @@ -40,6 +42,19 @@ class RenderOpenApi return array_keys($this->openApiRenderers); } + public function renderFromRequest(Request $request, string $format, $area, array $extraOptions = []) + { + $options = []; + if ('' !== $request->getBaseUrl()) { + $options += [ + 'server_url' => $request->getSchemeAndHttpHost().$request->getBaseUrl(), + ]; + } + $options += $extraOptions; + + return $this->render($format, $area, $options); + } + /** * @throws InvalidArgumentException If the area to dump is not valid */ @@ -54,6 +69,10 @@ class RenderOpenApi /** @var OpenApi $spec */ $spec = $this->generatorLocator->get($area)->generate(); + if (array_key_exists('server_url', $options) && $options['server_url']) { + $spec->servers = [new Server(['url' => $options['server_url']])]; + } + return $this->openApiRenderers[$format]->render($spec, $options); } } diff --git a/Render/Yaml/YamlOpenApiRenderer.php b/Render/Yaml/YamlOpenApiRenderer.php index 025216c..a8e7c5d 100644 --- a/Render/Yaml/YamlOpenApiRenderer.php +++ b/Render/Yaml/YamlOpenApiRenderer.php @@ -14,7 +14,6 @@ namespace Nelmio\ApiDocBundle\Render\Yaml; use Nelmio\ApiDocBundle\Render\OpenApiRenderer; use Nelmio\ApiDocBundle\Render\RenderOpenApi; use OpenApi\Annotations\OpenApi; -use OpenApi\Annotations\Server; class YamlOpenApiRenderer implements OpenApiRenderer { @@ -25,14 +24,6 @@ class YamlOpenApiRenderer implements OpenApiRenderer public function render(OpenApi $spec, array $options = []): string { - $options += [ - 'server_url' => null, - ]; - - if ($options['server_url']) { - $spec->servers = [new Server(['url' => $options['server_url']])]; - } - return $spec->toYaml(); } }