vendor/boldr/cms-bundle/src/DependencyInjection/CompilerPass.php line 71

Open in your IDE?
  1. <?php
  2. namespace Boldr\Cms\CmsBundle\DependencyInjection;
  3. use Boldr\Cms\CmsBundle\Admin\CrudControllerConfiguratorProvider;
  4. use Boldr\Cms\CmsBundle\Translation\EntityTranslatorProvider;
  5. use Boldr\Cms\CmsBundle\Controller\Admin\AbstractPolymorphicCrudController;
  6. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  7. use Symfony\Component\DependencyInjection\ContainerBuilder;
  8. use Symfony\Component\DependencyInjection\Reference;
  9. use Symfony\Component\DependencyInjection\Attribute\TaggedIterator;
  10. use Exception;
  11. class CompilerPass implements CompilerPassInterface
  12. {
  13.     public function process(ContainerBuilder $container): void
  14.     {
  15.         // Entity translators
  16.         $entityTranslatorProvider $container->getDefinition(EntityTranslatorProvider::class);
  17.         foreach ($container->findTaggedServiceIds('boldr_cms.entity_translator') as $id => $tags)
  18.         {
  19.             foreach ($tags as $attributes)
  20.             {
  21.                 if (!isset($attributes['entity_class']))
  22.                     throw new Exception('Tag definition "boldr_cms.entity_translator" for service "'.$id.'" is missing required attribute "entity_class".');
  23.                 $entityTranslatorProvider->addMethodCall('addTranslator', [
  24.                     $attributes['entity_class'],
  25.                     new Reference($id)
  26.                 ]);
  27.             }
  28.         }
  29.         // Migrations
  30.         $configurationDefinition $container->getDefinition('doctrine.migrations.configuration');
  31.         foreach ($container->getExtensions() as $extension)
  32.         {
  33.             if ($extension instanceof MigrationsExtensionInterface)
  34.             {
  35.                 $configurationDefinition->addMethodCall('addMigrationsDirectory', [$extension->getMigrationsNamespace(), realpath($extension->getMigrationsPath())]);
  36.             }
  37.         }
  38.         // CrudController configurators
  39.         $crudControllerConfiguratorProvider $container->getDefinition(CrudControllerConfiguratorProvider::class);
  40.         foreach ($container->findTaggedServiceIds('boldr_cms.crud_controller_configurator') as $id => $tags)
  41.         {
  42.             foreach ($tags as $attributes)
  43.             {
  44.                 if (!isset($attributes['crud_controller_class']))
  45.                     throw new Exception('Tag definition "boldr_cms.crud_controller_configurator" for service "'.$id.'" is missing required attribute "crud_controller_class".');
  46.                 $crudControllerConfiguratorProvider->addMethodCall('addCrudControllerConfigurator', [
  47.                     $attributes['crud_controller_class'],
  48.                     new Reference($id)
  49.                 ]);
  50.             }
  51.         }
  52.         // Polymoprhics
  53.         $polymorphicTypeProviders array_map(fn($id) => $container->getDefinition($id), array_keys($container->findTaggedServiceIds('boldr_cms.polymorphic_type_provider')));
  54.         foreach ($container->getDefinitions() as $id => $definition)
  55.         {
  56.             $class $definition->getClass();
  57.             if ($class && class_exists($class))
  58.             {
  59.                 $parents class_parents($definition->getClass());
  60.                 if (isset($parents[AbstractPolymorphicCrudController::class]))
  61.                 {
  62.                     $container->getDefinition($id)->addMethodCall('setTypeProviders', [$polymorphicTypeProviders]);
  63.                 }
  64.             }
  65.         }
  66.     }
  67. }