12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- <?php
- namespace Doctrine\Bundle\DoctrineBundle;
- use Doctrine\ORM\EntityManagerInterface;
- use Doctrine\ORM\ORMException;
- use ProxyManager\Proxy\LazyLoadingInterface;
- use Psr\Container\ContainerInterface;
- use Symfony\Bridge\Doctrine\ManagerRegistry;
- use Symfony\Contracts\Service\ResetInterface;
- use function array_keys;
- use function assert;
- /**
- * References all Doctrine connections and entity managers in a given Container.
- */
- class Registry extends ManagerRegistry implements ResetInterface
- {
- /**
- * @param string[] $connections
- * @param string[] $entityManagers
- */
- public function __construct(ContainerInterface $container, array $connections, array $entityManagers, string $defaultConnection, string $defaultEntityManager)
- {
- $this->container = $container;
- parent::__construct('ORM', $connections, $entityManagers, $defaultConnection, $defaultEntityManager, 'Doctrine\ORM\Proxy\Proxy');
- }
- /**
- * Resolves a registered namespace alias to the full namespace.
- *
- * This method looks for the alias in all registered entity managers.
- *
- * @see Configuration::getEntityNamespace
- *
- * @param string $alias The alias
- *
- * @return string The full namespace
- */
- public function getAliasNamespace($alias)
- {
- foreach (array_keys($this->getManagers()) as $name) {
- $objectManager = $this->getManager($name);
- if (! $objectManager instanceof EntityManagerInterface) {
- continue;
- }
- try {
- return $objectManager->getConfiguration()->getEntityNamespace($alias);
- } catch (ORMException $e) {
- }
- }
- throw ORMException::unknownEntityNamespace($alias);
- }
- public function reset(): void
- {
- foreach ($this->getManagerNames() as $managerName => $serviceId) {
- $this->resetOrClearManager($managerName, $serviceId);
- }
- }
- private function resetOrClearManager(string $managerName, string $serviceId): void
- {
- if (! $this->container->initialized($serviceId)) {
- return;
- }
- $manager = $this->container->get($serviceId);
- assert($manager instanceof EntityManagerInterface);
- if (! $manager instanceof LazyLoadingInterface || $manager->isOpen()) {
- $manager->clear();
- return;
- }
- $this->resetManager($managerName);
- }
- }
|