diff --git a/ruleset.xml b/ruleset.xml
index 243f9a2..df9000c 100644
--- a/ruleset.xml
+++ b/ruleset.xml
@@ -19,6 +19,9 @@
+
+
+
/tests/tmp
diff --git a/src/DI/OrmExtension.php b/src/DI/OrmExtension.php
index c79bcce..2a9f76d 100644
--- a/src/DI/OrmExtension.php
+++ b/src/DI/OrmExtension.php
@@ -13,6 +13,7 @@
use Nette\InvalidStateException;
use Nettrine\ORM\EntityManager;
use Nettrine\ORM\EntityManagerFactory;
+use Nettrine\ORM\ManagerRegistry;
use Nettrine\ORM\Mapping\ContainerEntityListenerResolver;
final class OrmExtension extends CompilerExtension
@@ -140,6 +141,14 @@ public function loadEntityManagerConfiguration(): void
$builder->getDefinitionByType(EventManager::class), // Nettrine/DBAL
$entityManagerClass,
]);
+
+ // ManagerRegistry
+ $builder->addDefinition($this->prefix('managerRegistry'))
+ ->setClass(ManagerRegistry::class)
+ ->setArguments([
+ $builder->getDefinitionByType(Connection::class),
+ $this->prefix('@entityManager'),
+ ]);
}
}
diff --git a/src/ManagerRegistry.php b/src/ManagerRegistry.php
new file mode 100644
index 0000000..a1ba6e4
--- /dev/null
+++ b/src/ManagerRegistry.php
@@ -0,0 +1,76 @@
+findByType(get_class($connection))[0];
+ $defaultManager = $container->findByType(get_class($em))[0];
+
+ $connections = ['default' => $defaultConnection];
+ $managers = ['default' => $defaultManager];
+
+ parent::__construct('ORM', $connections, $managers, 'default', 'default', Proxy::class);
+ $this->container = $container;
+ }
+
+ /**
+ * @param string $name
+ * @return object
+ * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
+ */
+ protected function getService($name): object
+ {
+ return $this->container->getService($name);
+ }
+
+ /**
+ * @param string $name
+ * @return void
+ * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
+ */
+ protected function resetService($name): void
+ {
+ $this->container->removeService($name);
+ }
+
+ /**
+ * @param string $alias
+ * @return string
+ * @throws ORMException
+ * @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
+ */
+ public function getAliasNamespace($alias): string
+ {
+ foreach (array_keys($this->getManagers()) as $name) {
+ try {
+ /** @var EntityManager $entityManager */
+ $entityManager = $this->getManager($name);
+ return $entityManager->getConfiguration()->getEntityNamespace($alias);
+ } catch (ORMException $e) {
+ // Ignore
+ }
+ }
+
+ throw ORMException::unknownEntityNamespace($alias);
+ }
+
+}