diff --git a/Controller/YamlDocumentationController.php b/Controller/YamlDocumentationController.php
new file mode 100644
index 0000000..7557fc8
--- /dev/null
+++ b/Controller/YamlDocumentationController.php
@@ -0,0 +1,47 @@
+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..8c888a6 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..01dc4a0 100644
--- a/Tests/Functional/SwaggerUiTest.php
+++ b/Tests/Functional/SwaggerUiTest.php
@@ -11,6 +11,7 @@
namespace Nelmio\ApiDocBundle\Tests\Functional;
+use OpenApi\Annotations\Server;
use Symfony\Bundle\FrameworkBundle\KernelBrowser;
class SwaggerUiTest extends WebTestCase
@@ -72,4 +73,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)) {