vendor/stof/doctrine-extensions-bundle/src/DependencyInjection/StofDoctrineExtensionsExtension.php line 53

Open in your IDE?
  1. <?php
  2. namespace Stof\DoctrineExtensionsBundle\DependencyInjection;
  3. use Symfony\Component\Config\Loader\LoaderInterface;
  4. use Symfony\Component\HttpKernel\DependencyInjection\Extension;
  5. use Symfony\Component\Config\Definition\Processor;
  6. use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
  7. use Symfony\Component\Config\FileLocator;
  8. use Symfony\Component\DependencyInjection\ContainerBuilder;
  9. class StofDoctrineExtensionsExtension extends Extension
  10. {
  11.     private $entityManagers   = array();
  12.     private $documentManagers = array();
  13.     public function load(array $configsContainerBuilder $container)
  14.     {
  15.         $processor = new Processor();
  16.         $configuration = new Configuration();
  17.         $config $processor->processConfiguration($configuration$configs);
  18.         $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
  19.         $loaded = array();
  20.         $this->entityManagers $this->processObjectManagerConfigurations($config['orm'], $container$loader$loaded'doctrine.event_subscriber');
  21.         $this->documentManagers $this->processObjectManagerConfigurations($config['mongodb'], $container$loader$loaded'doctrine_mongodb.odm.event_subscriber');
  22.         $container->setParameter('stof_doctrine_extensions.default_locale'$config['default_locale']);
  23.         $container->setParameter('stof_doctrine_extensions.translation_fallback'$config['translation_fallback']);
  24.         $container->setParameter('stof_doctrine_extensions.persist_default_translation'$config['persist_default_translation']);
  25.         $container->setParameter('stof_doctrine_extensions.skip_translation_on_load'$config['skip_translation_on_load']);
  26.         // Register the uploadable configuration if the listener is used
  27.         if (isset($loaded['uploadable'])) {
  28.             $uploadableConfig $config['uploadable'];
  29.             $container->setParameter('stof_doctrine_extensions.default_file_path'$uploadableConfig['default_file_path']);
  30.             $container->setParameter('stof_doctrine_extensions.uploadable.default_file_info.class'$uploadableConfig['default_file_info_class']);
  31.             $container->setParameter(
  32.                 'stof_doctrine_extensions.uploadable.validate_writable_directory',
  33.                 $uploadableConfig['validate_writable_directory']
  34.             );
  35.             if ($uploadableConfig['default_file_path']) {
  36.                 $container->getDefinition('stof_doctrine_extensions.listener.uploadable')
  37.                     ->addMethodCall('setDefaultPath', array($uploadableConfig['default_file_path']));
  38.             }
  39.             if ($uploadableConfig['mime_type_guesser_class']) {
  40.                 if (!class_exists($uploadableConfig['mime_type_guesser_class'])) {
  41.                     $msg 'Class "%s" configured to use as the mime type guesser in the Uploadable extension does not exist.';
  42.                     throw new \InvalidArgumentException(sprintf($msg$uploadableConfig['mime_type_guesser_class']));
  43.                 }
  44.                 $container->setParameter(
  45.                     'stof_doctrine_extensions.uploadable.mime_type_guesser.class',
  46.                     $uploadableConfig['mime_type_guesser_class']
  47.                 );
  48.             }
  49.         }
  50.         foreach ($config['class'] as $listener => $class) {
  51.             $container->setParameter(sprintf('stof_doctrine_extensions.listener.%s.class'$listener), $class);
  52.         }
  53.     }
  54.     /**
  55.      * @internal
  56.      */
  57.     public function configValidate(ContainerBuilder $container)
  58.     {
  59.         foreach ($this->entityManagers as $name) {
  60.             if (!$container->hasDefinition(sprintf('doctrine.dbal.%s_connection'$name))) {
  61.                 throw new \InvalidArgumentException(sprintf('Invalid %s config: DBAL connection "%s" not found'$this->getAlias(), $name));
  62.             }
  63.         }
  64.         foreach ($this->documentManagers as $name) {
  65.             if (!$container->hasDefinition(sprintf('doctrine_mongodb.odm.%s_document_manager'$name))) {
  66.                 throw new \InvalidArgumentException(sprintf('Invalid %s config: document manager "%s" not found'$this->getAlias(), $name));
  67.             }
  68.         }
  69.     }
  70.     /**
  71.      * @param array            $configs
  72.      * @param ContainerBuilder $container
  73.      * @param LoaderInterface  $loader
  74.      * @param array            $loaded
  75.      * @param string           $doctrineSubscriberTag
  76.      *
  77.      * @return array
  78.      */
  79.     private function processObjectManagerConfigurations(array $configsContainerBuilder $containerLoaderInterface $loader, array &$loaded$doctrineSubscriberTag)
  80.     {
  81.         $usedManagers = array();
  82.         $listenerPriorities = array(
  83.             'translatable' => -10,
  84.             'loggable' => 5,
  85.             'uploadable' => -5,
  86.         );
  87.         foreach ($configs as $name => $listeners) {
  88.             foreach ($listeners as $ext => $enabled) {
  89.                 if (!$enabled) {
  90.                     continue;
  91.                 }
  92.                 if (!isset($loaded[$ext])) {
  93.                     $loader->load($ext.'.xml');
  94.                     $loaded[$ext] = true;
  95.                 }
  96.                 $attributes = array('connection' => $name);
  97.                 if (isset($listenerPriorities[$ext])) {
  98.                     $attributes['priority'] = $listenerPriorities[$ext];
  99.                 }
  100.                 $definition $container->getDefinition(sprintf('stof_doctrine_extensions.listener.%s'$ext));
  101.                 $definition->addTag($doctrineSubscriberTag$attributes);
  102.                 $usedManagers[$name] = true;
  103.             }
  104.         }
  105.         return array_keys($usedManagers);
  106.     }
  107. }