diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 83204cc..95405b9 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -40,12 +40,6 @@ final class Configuration implements ConfigurationInterface ->thenInvalid('You must not use both `nelmio_api_doc.areas` and `nelmio_api_doc.routes` config options. Please update your config to only use `nelmio_api_doc.areas`.') ->end() ->children() - ->arrayNode('documentation') - ->useAttributeAsKey('key') - ->info('The documentation used as base') - ->example(['info' => ['title' => 'My App']]) - ->prototype('variable')->end() - ->end() ->arrayNode('areas') ->info('Filter the routes that are documented') ->defaultValue(['default' => ['path_patterns' => [], 'host_patterns' => []]]) @@ -77,6 +71,12 @@ final class Configuration implements ConfigurationInterface ->example(['^api\.']) ->prototype('scalar')->end() ->end() + ->arrayNode('documentation') + ->useAttributeAsKey('key') + ->info('The documentation used as base') + ->example(['info' => ['title' => 'My App']]) + ->prototype('variable')->end() + ->end() ->end() ->end() ->end() diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 1522712..8f80212 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -13,6 +13,7 @@ namespace Nelmio\ApiDocBundle\DependencyInjection; use FOS\RestBundle\Controller\Annotations\ParamInterface; use Nelmio\ApiDocBundle\ApiDocGenerator; +use Nelmio\ApiDocBundle\Describer\ExternalDocDescriber; use Nelmio\ApiDocBundle\Describer\RouteDescriber; use Nelmio\ApiDocBundle\Describer\SwaggerPhpDescriber; use Nelmio\ApiDocBundle\ModelDescriber\BazingaHateoasModelDescriber; @@ -103,6 +104,16 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI new Reference('logger'), ]) ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => -200]); + + $container->register(sprintf('nelmio_api_doc.describers.config.%s', $area), ExternalDocDescriber::class) + ->setPublic(false) + ->setArguments([ + $config['areas'][$area]['documentation'], + true, + ]) + ->addTag(sprintf('nelmio_api_doc.describer.%s', $area), ['priority' => 1000]); + + $container->getDefinition(sprintf('nelmio_api_doc.describers.config.%s', $area))->replaceArgument(0, $config['areas'][$area]['documentation']); } $container->register('nelmio_api_doc.generator_locator') @@ -151,9 +162,6 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI ]); } } - - // Import the base configuration - $container->getDefinition('nelmio_api_doc.describers.config')->replaceArgument(0, $config['documentation']); } private function findNameAliases(array $names, string $area): array diff --git a/Resources/config/services.xml b/Resources/config/services.xml index 1f4393a..17dcbed 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -26,7 +26,7 @@ - + diff --git a/Routing/FilteredRouteCollectionBuilder.php b/Routing/FilteredRouteCollectionBuilder.php index 0575c21..9c28a7e 100644 --- a/Routing/FilteredRouteCollectionBuilder.php +++ b/Routing/FilteredRouteCollectionBuilder.php @@ -26,6 +26,7 @@ final class FilteredRouteCollectionBuilder ->setDefaults([ 'path_patterns' => [], 'host_patterns' => [], + 'documentation' => [], ]) ->setAllowedTypes('path_patterns', 'string[]') ->setAllowedTypes('host_patterns', 'string[]')