diff --git a/Controller/DocumentationController.php b/Controller/JsonDocumentationController.php
similarity index 96%
rename from Controller/DocumentationController.php
rename to Controller/JsonDocumentationController.php
index 0450d3a..5d95f25 100644
--- a/Controller/DocumentationController.php
+++ b/Controller/JsonDocumentationController.php
@@ -18,7 +18,7 @@ use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
-final class DocumentationController
+final class JsonDocumentationController
{
private $generatorLocator;
diff --git a/Controller/YamlDocumentationController.php b/Controller/YamlDocumentationController.php
new file mode 100644
index 0000000..62be3ad
--- /dev/null
+++ b/Controller/YamlDocumentationController.php
@@ -0,0 +1,48 @@
+generatorLocator = $generatorLocator;
+ }
+
+ public function __invoke(Request $request, $area = 'default')
+ {
+ if (!$this->generatorLocator->has($area)) {
+ throw new BadRequestHttpException(sprintf('Area "%s" is not supported as it isn\'t defined in config.', $area));
+ }
+
+ /** @var OpenApi $spec */
+ $spec = $this->generatorLocator->get($area)->generate();
+
+ if ('' !== $request->getBaseUrl()) {
+ $spec->servers = [new Server(['url' => $request->getSchemeAndHttpHost().$request->getBaseUrl()])];
+ }
+
+ return new Response($spec->toYaml(), 200, [
+ 'Content-Type' => 'text/x-yaml'
+ ]);
+ }
+}
diff --git a/Resources/config/services.xml b/Resources/config/services.xml
index f2a34de..b7221b8 100644
--- a/Resources/config/services.xml
+++ b/Resources/config/services.xml
@@ -16,7 +16,13 @@
-
+
+
+
+
+
+
+
diff --git a/Tests/Functional/SwaggerUiTest.php b/Tests/Functional/SwaggerUiTest.php
index 38b5d38..ddc9129 100644
--- a/Tests/Functional/SwaggerUiTest.php
+++ b/Tests/Functional/SwaggerUiTest.php
@@ -11,7 +11,9 @@
namespace Nelmio\ApiDocBundle\Tests\Functional;
+use OpenApi\Annotations\Server;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
+use Symfony\Component\Yaml\Yaml;
class SwaggerUiTest extends WebTestCase
{
@@ -72,4 +74,19 @@ class SwaggerUiTest extends WebTestCase
$this->assertEquals($expected, json_decode($response->getContent(), true));
}
+
+ public function testYamlDocs()
+ {
+ $this->client->request('GET', '/app_dev.php/docs.yaml');
+
+ $response = $this->client->getResponse();
+ $this->assertEquals(200, $response->getStatusCode());
+ $this->assertEquals('text/x-yaml; charset=UTF-8', $response->headers->get('Content-Type'));
+
+ $spec = $this->getOpenApiDefinition();
+ $spec->servers = [new Server(['url' => 'http://api.example.com/app_dev.php'])];
+ $expected = $spec->toYaml();
+
+ $this->assertEquals($expected, $response->getContent());
+ }
}
diff --git a/Tests/Functional/TestKernel.php b/Tests/Functional/TestKernel.php
index 66885bf..2c9528f 100644
--- a/Tests/Functional/TestKernel.php
+++ b/Tests/Functional/TestKernel.php
@@ -87,7 +87,8 @@ class TestKernel extends Kernel
$routes->import(__DIR__.'/Controller/InvokableController.php', '/', 'annotation');
$routes->import('', '/api', 'api_platform');
$routes->add('/docs/{area}', 'nelmio_api_doc.controller.swagger_ui')->setDefault('area', 'default');
- $routes->add('/docs.json', 'nelmio_api_doc.controller.swagger');
+ $routes->add('/docs.json', 'nelmio_api_doc.controller.swagger_json');
+ $routes->add('/docs.yaml', 'nelmio_api_doc.controller.swagger_yaml');
$routes->import(__DIR__.'/Controller/FOSRestController.php', '/', 'annotation');
if (class_exists(SerializedName::class)) {