From 0ce1246c0ce6dba3c3a98252c4102789bcc0796f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Thu, 15 Nov 2018 20:49:53 +0100 Subject: [PATCH] Feature detection --- DependencyInjection/DoctrineExtension.php | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) 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]); }