Explorar el Código

[DoctrineBundle] Added custom hydrator for the EntityManager from configuration

Francis Besset hace 14 años
padre
commit
daa138ffc8

+ 12 - 0
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/Configuration.php

@@ -132,6 +132,18 @@ class Configuration
                         ->scalarNode('proxy_dir')->defaultValue('%kernel.cache_dir%/doctrine/orm/Proxies')->end()
                         ->scalarNode('proxy_namespace')->defaultValue('Proxies')->end()
                     ->end()
+                    ->fixXmlConfig('hydrator')
+                    ->children()
+                        ->arrayNode('hydrators')
+                            ->useAttributeAsKey('name')
+                            ->prototype('scalar')
+                                ->beforeNormalization()
+                                    ->ifTrue(function($v) { return is_array($v) && isset($v['class']); })
+                                    ->then(function($v) { return $v['class']; })
+                                ->end()
+                            ->end()
+                        ->end()
+                    ->end()
                     ->fixXmlConfig('entity_manager')
                     ->append($this->getOrmEntityManagersNode())
                 ->end()

+ 5 - 1
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

@@ -151,7 +151,7 @@ class DoctrineExtension extends AbstractDoctrineExtension
             $config['default_entity_manager'] = reset($entityManagers);
         }
 
-        $options = array('default_entity_manager', 'auto_generate_proxy_classes', 'proxy_dir', 'proxy_namespace');
+        $options = array('default_entity_manager', 'auto_generate_proxy_classes', 'proxy_dir', 'proxy_namespace', 'hydrators');
         foreach ($options as $key) {
             $container->setParameter('doctrine.orm.'.$key, $config[$key]);
         }
@@ -197,6 +197,10 @@ class DoctrineExtension extends AbstractDoctrineExtension
             $ormConfigDef->addMethodCall($method, array($arg));
         }
 
+        foreach ($container->getParameter('doctrine.orm.hydrators') as $name => $class) {
+            $ormConfigDef->addMethodCall('addCustomHydrationMode', array ($name, $class));
+        }
+
         if (!empty($entityManager['dql'])) {
             foreach ($entityManager['dql']['string_functions'] as $name => $function) {
                 $ormConfigDef->addMethodCall('addCustomStringFunction', array ($name, $function));