diff --git a/DependencyInjection/NelmioApiDocExtension.php b/DependencyInjection/NelmioApiDocExtension.php index 5f7d749..8633e96 100644 --- a/DependencyInjection/NelmioApiDocExtension.php +++ b/DependencyInjection/NelmioApiDocExtension.php @@ -180,6 +180,18 @@ final class NelmioApiDocExtension extends Extension implements PrependExtensionI // Import the base configuration $container->getDefinition('nelmio_api_doc.describers.config')->replaceArgument(0, $config['documentation']); + + // Compatibility Symfony + $controllerNameConverter = null; + if ($container->hasDefinition('.legacy_controller_name_converter')) { // 4.4 + $controllerNameConverter = $container->getDefinition('.legacy_controller_name_converter'); + } elseif ($container->hasDefinition('controller_name_converter')) { // < 4.4 + $controllerNameConverter = $container->getDefinition('controller_name_converter'); + } + + if (null !== $controllerNameConverter) { + $container->getDefinition('nelmio_api_doc.controller_reflector')->setArgument(1, $controllerNameConverter); + } } private function findNameAliases(array $names, string $area): array diff --git a/Resources/config/services.xml b/Resources/config/services.xml index 3502dde..978930e 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -19,7 +19,6 @@ - diff --git a/Util/ControllerReflector.php b/Util/ControllerReflector.php index 7eba46e..3f27887 100644 --- a/Util/ControllerReflector.php +++ b/Util/ControllerReflector.php @@ -26,10 +26,13 @@ class ControllerReflector private $controllers = []; - public function __construct(ContainerInterface $container, ControllerNameParser $controllerNameParser) + public function __construct(ContainerInterface $container) { $this->container = $container; - $this->controllerNameParser = $controllerNameParser; + + if (1 < \func_num_args() && func_get_arg(1) instanceof ControllerNameParser) { + $this->controllerNameParser = func_get_arg(1); + } } /** @@ -79,8 +82,16 @@ class ControllerReflector return $this->controllers[$controller]; } - if (false === strpos($controller, '::') && 2 === substr_count($controller, ':')) { - $controller = $this->controllerNameParser->parse($controller); + if ($this->controllerNameParser && false === strpos($controller, '::') && 2 === substr_count($controller, ':')) { + $deprecatedNotation = $controller; + + try { + $controller = $this->controllerNameParser->parse($controller); + + @trigger_error(sprintf('Referencing controllers with %s is deprecated since Symfony 4.1, use "%s" instead.', $deprecatedNotation, $controller), E_USER_DEPRECATED); + } catch (\InvalidArgumentException $e) { + // unable to optimize unknown notation + } } if (preg_match('#(.+)::([\w]+)#', $controller, $matches)) {