diff --git a/src/Bundle/ChillMainBundle/CRUD/CompilerPass/CRUDControllerCompilerPass.php b/src/Bundle/ChillMainBundle/CRUD/CompilerPass/CRUDControllerCompilerPass.php index d8a46837c..11b3c34fd 100644 --- a/src/Bundle/ChillMainBundle/CRUD/CompilerPass/CRUDControllerCompilerPass.php +++ b/src/Bundle/ChillMainBundle/CRUD/CompilerPass/CRUDControllerCompilerPass.php @@ -22,6 +22,7 @@ use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Reference; use Chill\MainBundle\Routing\MenuComposer; use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Alias; /** * @@ -49,29 +50,32 @@ class CRUDControllerCompilerPass implements CompilerPassInterface private function configureCrudController(ContainerBuilder $container, array $crudEntry, string $apiOrCrud): void { $controllerClass = $crudEntry['controller']; - $controllerServiceName = 'cs'.$apiOrCrud.'_'.$crudEntry['name'].'_controller'; - if ($container->hasDefinition($controllerClass)) { - $controller = $container->getDefinition($controllerClass); - $container->removeDefinition($controllerClass); - $alreadyDefined = true; - } else { - $controller = new Definition($controllerClass); - $alreadyDefined = false; - } - - $controller->addTag('controller.service_arguments'); - if (FALSE === $alreadyDefined) { - $controller->setAutoconfigured(true); - $controller->setPublic(true); - } - + // create config parameter in container $param = 'chill_main_'.$apiOrCrud.'_config_'.$crudEntry['name']; $container->setParameter($param, $crudEntry); - $controller->addMethodCall('setCrudConfig', ['%'.$param.'%']); - $container->setDefinition($controllerServiceName, $controller); + if ($container->hasDefinition($controllerClass)) { + // create an alias to not to re-create the service + $alias = new Alias($controllerClass, true); + $container->setAlias($controllerServiceName, $alias); + + // add the "addMethodCall" + $container->getDefinition($controllerClass) + ->addMethodCall('setCrudConfig', ['%'.$param.'%']); + + } else { + $controller = new Definition($controllerClass); + + $controller->addTag('controller.service_arguments'); + $controller->setAutoconfigured(true); + $controller->setPublic(true); + + $controller->addMethodCall('setCrudConfig', ['%'.$param.'%']); + + $container->setDefinition($controllerServiceName, $controller); + } } } diff --git a/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php b/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php index d7e19ea9c..36aadb8b7 100644 --- a/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php +++ b/src/Bundle/ChillMainBundle/CRUD/Routing/CRUDRoutesLoader.php @@ -142,7 +142,7 @@ class CRUDRoutesLoader extends Loader protected function loadApi(array $crudConfig): RouteCollection { $collection = new RouteCollection(); - $controller ='csapi_'.$crudConfig['name'].'_controller'; + $controller = 'csapi_'.$crudConfig['name'].'_controller'; foreach ($crudConfig['actions'] as $name => $action) { // filter only on single actions