diff --git a/src/DI/Helpers/BuilderMan.php b/src/DI/Helpers/BuilderMan.php index 72119ea..2da59c3 100644 --- a/src/DI/Helpers/BuilderMan.php +++ b/src/DI/Helpers/BuilderMan.php @@ -83,6 +83,11 @@ public function getManagersMap(): array $definitions[$tagValue['name']] = $serviceName; } + /** @var array{name: string} $tagValue */ + foreach ($builder->findByTag(OrmExtension::MANAGER_DECORATOR_TAG) as $serviceName => $tagValue) { + $definitions[$tagValue['name']] = $serviceName; + } + return $definitions; } diff --git a/src/ManagerRegistry.php b/src/ManagerRegistry.php index 7afbf02..6f29ce5 100644 --- a/src/ManagerRegistry.php +++ b/src/ManagerRegistry.php @@ -4,6 +4,7 @@ use Doctrine\ORM\EntityManager; use Doctrine\Persistence\AbstractManagerRegistry; +use Doctrine\Persistence\ObjectManagerDecorator; use Doctrine\Persistence\Proxy; use Nette\DI\Container; use Nettrine\ORM\Utils\Binder; @@ -45,9 +46,17 @@ protected function resetService(string $name): void $manager = $this->container->getService($name); Binder::use($manager, function (): void { - /** @var EntityManager $this */ - $this->closed = false; // @phpstan-ignore-line + if ($this instanceof EntityManager) { // @phpstan-ignore-line + $this->closed = false; + } elseif ($this instanceof ObjectManagerDecorator) { // @phpstan-ignore-line + Binder::use($this->wrapped, function (): void { + if ($this instanceof EntityManager) {// @phpstan-ignore-line + $this->closed = false; + } + }); + } }); + //throw new \Exception($manager::class); $this->container->removeService($name); }