From e65ac7ffd583b612c520b592308b5f1cb1a6abe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Tue, 3 Jul 2018 16:55:44 +0200 Subject: [PATCH 1/4] Inject the EntityManager instead of the factory in DoctrineExtractor --- DependencyInjection/DoctrineExtension.php | 11 +---------- composer.json | 2 +- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index f352722a0..1647f11b4 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -797,17 +797,8 @@ protected function loadOrmCacheDrivers(array $entityManager, ContainerBuilder $c */ private function loadPropertyInfoExtractor($entityManagerName, ContainerBuilder $container) { - $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); - $propertyExtractorDefinition = $container->register(sprintf('doctrine.orm.%s_entity_manager.property_info_extractor', $entityManagerName), 'Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor'); - $propertyExtractorDefinition->addArgument(new Reference($metadataFactoryService)); + $propertyExtractorDefinition->addArgument(new Reference(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName))); $propertyExtractorDefinition->addTag('property_info.list_extractor', ['priority' => -1001]); $propertyExtractorDefinition->addTag('property_info.type_extractor', ['priority' => -999]); } diff --git a/composer.json b/composer.json index 86e04d70f..e7a170f5a 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "symfony/dependency-injection": "~2.7|~3.0|~4.0", "doctrine/dbal": "^2.5.12", "jdorn/sql-formatter": "^1.2.16", - "symfony/doctrine-bridge": "~2.7|~3.0|~4.0", + "symfony/doctrine-bridge": "^4.2", "doctrine/doctrine-cache-bundle": "~1.2" }, "require-dev": { From 342f23abcf9b1205d8674199e73c7e956503f6c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Thu, 15 Nov 2018 20:44:23 +0100 Subject: [PATCH 2/4] Revert "Inject the EntityManager instead of the factory in DoctrineExtractor" This reverts commit e65ac7ffd583b612c520b592308b5f1cb1a6abe4. --- DependencyInjection/DoctrineExtension.php | 11 ++++++++++- composer.json | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index 1647f11b4..f352722a0 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -797,8 +797,17 @@ protected function loadOrmCacheDrivers(array $entityManager, ContainerBuilder $c */ private function loadPropertyInfoExtractor($entityManagerName, ContainerBuilder $container) { + $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); + $propertyExtractorDefinition = $container->register(sprintf('doctrine.orm.%s_entity_manager.property_info_extractor', $entityManagerName), 'Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor'); - $propertyExtractorDefinition->addArgument(new Reference(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName))); + $propertyExtractorDefinition->addArgument(new Reference($metadataFactoryService)); $propertyExtractorDefinition->addTag('property_info.list_extractor', ['priority' => -1001]); $propertyExtractorDefinition->addTag('property_info.type_extractor', ['priority' => -999]); } diff --git a/composer.json b/composer.json index e7a170f5a..86e04d70f 100644 --- a/composer.json +++ b/composer.json @@ -30,7 +30,7 @@ "symfony/dependency-injection": "~2.7|~3.0|~4.0", "doctrine/dbal": "^2.5.12", "jdorn/sql-formatter": "^1.2.16", - "symfony/doctrine-bridge": "^4.2", + "symfony/doctrine-bridge": "~2.7|~3.0|~4.0", "doctrine/doctrine-cache-bundle": "~1.2" }, "require-dev": { From 71ad41bf758b4edf02bfc9dc84bd202b1092a1a9 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 3/4] 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..e0008cbc2 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')) { + $argumentId = sprintf('doctrine.orm.%s_entity_manager', $entityManagerName); + } else { + $argumentId = sprintf('doctrine.orm.%s_entity_manager.metadata_factory', $entityManagerName); + + $metadataFactoryDefinition = $container->register($argumentId, '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($argumentId)); - $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]); } From 58c2217dbf4378e5080a7f3f79e0ab994bb7e156 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Thu, 15 Nov 2018 20:59:15 +0100 Subject: [PATCH 4/4] Use ::class --- DependencyInjection/DoctrineExtension.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index e0008cbc2..11a37483a 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -6,11 +6,13 @@ use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepositoryInterface; use Doctrine\Bundle\DoctrineCacheBundle\DependencyInjection\CacheProviderLoader; use Doctrine\Bundle\DoctrineCacheBundle\DependencyInjection\SymfonyBridgeAdapter; +use Doctrine\Common\Persistence\Mapping\ClassMetadataFactory; use Doctrine\ORM\Version; use LogicException; use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension; use Symfony\Bridge\Doctrine\Form\Type\DoctrineType; use Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddlewareFactory; +use Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\Alias; use Symfony\Component\DependencyInjection\ChildDefinition; @@ -23,6 +25,7 @@ use Symfony\Component\DependencyInjection\ServiceLocator; use Symfony\Component\Form\AbstractType; use Symfony\Component\Messenger\MessageBusInterface; +use Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface; /** * DoctrineExtension is an extension for the Doctrine DBAL and ORM library. @@ -797,13 +800,13 @@ protected function loadOrmCacheDrivers(array $entityManager, ContainerBuilder $c */ private function loadPropertyInfoExtractor($entityManagerName, ContainerBuilder $container) { - $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 = $container->register(sprintf('doctrine.orm.%s_entity_manager.property_info_extractor', $entityManagerName), DoctrineExtractor::class); + if (class_exists(PropertyInitializableExtractorInterface::class)) { $argumentId = sprintf('doctrine.orm.%s_entity_manager', $entityManagerName); } else { $argumentId = sprintf('doctrine.orm.%s_entity_manager.metadata_factory', $entityManagerName); - $metadataFactoryDefinition = $container->register($argumentId, 'Doctrine\Common\Persistence\Mapping\ClassMetadataFactory'); + $metadataFactoryDefinition = $container->register($argumentId, ClassMetadataFactory::class); $metadataFactoryDefinition->setFactory([ new Reference(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName)), 'getMetadataFactory',