Skip to content

Commit 6db8299

Browse files
authored
ManagerRegistry: support decorated EntityManager (#115)
* FIX: ManagerRegistry correctly return decorated EntityManager * CodingStandard fix * Fix reseting decorated EntityManagers
1 parent 97d7f11 commit 6db8299

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/DI/Helpers/BuilderMan.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,11 @@ public function getManagersMap(): array
8383
$definitions[$tagValue['name']] = $serviceName;
8484
}
8585

86+
/** @var array{name: string} $tagValue */
87+
foreach ($builder->findByTag(OrmExtension::MANAGER_DECORATOR_TAG) as $serviceName => $tagValue) {
88+
$definitions[$tagValue['name']] = $serviceName;
89+
}
90+
8691
return $definitions;
8792
}
8893

src/ManagerRegistry.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use Doctrine\ORM\EntityManager;
66
use Doctrine\Persistence\AbstractManagerRegistry;
7+
use Doctrine\Persistence\ObjectManagerDecorator;
78
use Doctrine\Persistence\Proxy;
89
use Nette\DI\Container;
910
use Nettrine\ORM\Utils\Binder;
@@ -45,9 +46,17 @@ protected function resetService(string $name): void
4546
$manager = $this->container->getService($name);
4647

4748
Binder::use($manager, function (): void {
48-
/** @var EntityManager $this */
49-
$this->closed = false; // @phpstan-ignore-line
49+
if ($this instanceof EntityManager) { // @phpstan-ignore-line
50+
$this->closed = false;
51+
} elseif ($this instanceof ObjectManagerDecorator) { // @phpstan-ignore-line
52+
Binder::use($this->wrapped, function (): void {
53+
if ($this instanceof EntityManager) {// @phpstan-ignore-line
54+
$this->closed = false;
55+
}
56+
});
57+
}
5058
});
59+
//throw new \Exception($manager::class);
5160

5261
$this->container->removeService($name);
5362
}

0 commit comments

Comments
 (0)