getParameter('chill_main_crud_route_loader_config'); $apiConfig = $container->getParameter('chill_main_api_route_loader_config'); foreach ($crudConfig as $crudEntry) { $this->configureCrudController($container, $crudEntry, 'crud'); } foreach ($apiConfig as $crudEntry) { $this->configureCrudController($container, $crudEntry, 'api'); } } /** * Add a controller for each definition, and add a methodCall to inject crud configuration to controller. */ private function configureCrudController(ContainerBuilder $container, array $crudEntry, string $apiOrCrud): void { $controllerClass = $crudEntry['controller']; $controllerServiceName = 'cs' . $apiOrCrud . '_' . $crudEntry['name'] . '_controller'; // create config parameter in container $param = 'chill_main_' . $apiOrCrud . '_config_' . $crudEntry['name']; $container->setParameter($param, $crudEntry); 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); } } }