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. }