From ee7e19c886ceb6ab54ec32558b38e145233e0d14 Mon Sep 17 00:00:00 2001 From: Christian Flothmann Date: Mon, 4 Feb 2019 14:57:56 +0100 Subject: [PATCH] fix Doctrine bridge version detection Since we cannot use feature changes to detect which version of the Doctrine bridge is installed I suggest that we parse the changelog and check if entries for 4.2 are present. --- DependencyInjection/DoctrineExtension.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php index 828876cf2..735839941 100644 --- a/DependencyInjection/DoctrineExtension.php +++ b/DependencyInjection/DoctrineExtension.php @@ -11,6 +11,7 @@ use LogicException; use Symfony\Bridge\Doctrine\DependencyInjection\AbstractDoctrineExtension; use Symfony\Bridge\Doctrine\Form\Type\DoctrineType; +use Symfony\Bridge\Doctrine\ManagerRegistry; use Symfony\Bridge\Doctrine\Messenger\DoctrineTransactionMiddleware; use Symfony\Bridge\Doctrine\PropertyInfo\DoctrineExtractor; use Symfony\Component\Config\FileLocator; @@ -25,7 +26,7 @@ use Symfony\Component\DependencyInjection\ServiceLocator; use Symfony\Component\Form\AbstractType; use Symfony\Component\Messenger\MessageBusInterface; -use Symfony\Component\PropertyInfo\PropertyInitializableExtractorInterface; +use ReflectionClass; /** * DoctrineExtension is an extension for the Doctrine DBAL and ORM library. @@ -800,7 +801,9 @@ 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), DoctrineExtractor::class); - if (interface_exists(PropertyInitializableExtractorInterface::class)) { + $doctrineBridgePath = dirname((new ReflectionClass(ManagerRegistry::class))->getFileName()); + + if (strpos(file_get_contents($doctrineBridgePath . '/CHANGELOG.md'), "4.2.0\n-----") !== false) { $argumentId = sprintf('doctrine.orm.%s_entity_manager', $entityManagerName); } else { $argumentId = sprintf('doctrine.orm.%s_entity_manager.metadata_factory', $entityManagerName);