From f10a2342af8ef828db08166c5cb8686602a1623b Mon Sep 17 00:00:00 2001 From: Matthias Pigulla Date: Thu, 3 Dec 2020 17:02:32 +0100 Subject: [PATCH 1/2] Allow ORM to use `ResolveTargetEntityListener` in ManagerRegistry::getManagerForClass() --- lib/Doctrine/Persistence/AbstractManagerRegistry.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/Persistence/AbstractManagerRegistry.php b/lib/Doctrine/Persistence/AbstractManagerRegistry.php index 63ff9b02..db4bca27 100644 --- a/lib/Doctrine/Persistence/AbstractManagerRegistry.php +++ b/lib/Doctrine/Persistence/AbstractManagerRegistry.php @@ -176,10 +176,16 @@ public function getManagerForClass($class) $class = $parentClass->getName(); } + $isInterface = $proxyClass->isInterface(); + foreach ($this->managers as $id) { $manager = $this->getService($id); - if (! $manager->getMetadataFactory()->isTransient($class)) { + if (! $isInterface && ! $manager->getMetadataFactory()->isTransient($class)) { + return $manager; + } + + if ($isInterface && $manager->getClassMetadata($class)) { return $manager; } } From 66a2fc07637413b048604ffaaf20b5cc49a8a2ec Mon Sep 17 00:00:00 2001 From: Matthias Pigulla Date: Thu, 3 Dec 2020 17:21:14 +0100 Subject: [PATCH 2/2] Improve handling of failed metadata lookups --- lib/Doctrine/Persistence/AbstractManagerRegistry.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/Doctrine/Persistence/AbstractManagerRegistry.php b/lib/Doctrine/Persistence/AbstractManagerRegistry.php index db4bca27..af269aff 100644 --- a/lib/Doctrine/Persistence/AbstractManagerRegistry.php +++ b/lib/Doctrine/Persistence/AbstractManagerRegistry.php @@ -2,6 +2,7 @@ namespace Doctrine\Persistence; +use Doctrine\Persistence\Mapping\MappingException; use InvalidArgumentException; use ReflectionClass; @@ -185,8 +186,13 @@ public function getManagerForClass($class) return $manager; } - if ($isInterface && $manager->getClassMetadata($class)) { - return $manager; + if ($isInterface) { + try { + $manager->getClassMetadata($class); + + return $manager; + } catch (MappingException $expected) { + } } }