diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index f352722a0..c6bb4a6ef 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -797,17 +797,22 @@ protected function loadOrmCacheDrivers(array $entityManager, ContainerBuilder $c */ private function loadPropertyInfoExtractor($entityManagerName, ContainerBuilder $container) { - $metadataFactoryService = sprintf('doctrine.orm.%s_entity_manager.metadata_factory', $entityManagerName); + $propertyExtractorDefinition = $container->register(sprintf('doctrine.orm.%s_entity_manager.property_info_extractor', $entityManagerName), 'Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor'); + if (class_exists('Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface')) { + $propertyExtractorDefinition->addArgument(new Reference(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName))); + } else { + $metadataFactoryService = sprintf('doctrine.orm.%s_entity_manager.metadata_factory', $entityManagerName); + + $metadataFactoryDefinition = $container->register($metadataFactoryService, 'Doctrine\Common\Persistence\Mapping\ClassMetadataFactory'); + $metadataFactoryDefinition->setFactory([ + new Reference(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName)), + 'getMetadataFactory', + ]); + $metadataFactoryDefinition->setPublic(false); - $metadataFactoryDefinition = $container->register($metadataFactoryService, 'Doctrine\Common\Persistence\Mapping\ClassMetadataFactory'); - $metadataFactoryDefinition->setFactory([ - new Reference(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName)), - 'getMetadataFactory', - ]); - $metadataFactoryDefinition->setPublic(false); + $propertyExtractorDefinition->addArgument(new Reference($metadataFactoryService)); + } - $propertyExtractorDefinition = $container->register(sprintf('doctrine.orm.%s_entity_manager.property_info_extractor', $entityManagerName), 'Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor'); - $propertyExtractorDefinition->addArgument(new Reference($metadataFactoryService)); $propertyExtractorDefinition->addTag('property_info.list_extractor', ['priority' => -1001]); $propertyExtractorDefinition->addTag('property_info.type_extractor', ['priority' => -999]); }