ObjectManager

Модуль предоставляет отдельный менеджер плагинов \Nnx\Doctrine\ObjectManager\DoctrineObjectManagerInterface, предназначенный для централизации работы с ObjectManager'ами Doctrine2.

Данный плагин-менеджер предоставляет унифицированный способ получения экземпляров объектов, реализующих \Doctrine\Common\Persistence\ObjectManager.

Характеристика Значение
Имя сервиса \Nnx\Doctrine\ObjectManager\DoctrineObjectManagerInterface
Секция в конфигах приложения nnx_doctrine_object_manager
Имя интерфейса для модуля \Nnx\Doctrine\ObjectManager\DoctrineObjectManagerProviderInterface
Метод, который должен реализовать модуль для возвращаения конфигов getDoctrineObjectManagerConfig

Интеграция с doctrine/doctrine-orm-module

Плагин-менеджер \Nnx\Doctrine\ObjectManager\DoctrineObjectManagerInterface реализует нативную интеграцию с doctrine/doctrine-orm-module. Так, например, для получения экземпляра \Doctrine\ORM\EntityManager можно использовать следующий код:


/** @var DoctrineObjectManagerInterface $doctrineObjectManager */
$doctrineObjectManager = $serviceLocator->get(DoctrineObjectManagerInterface::class);
$objectManager = $doctrineObjectManager->get('doctrine.entitymanager.orm_default');

ObjectManager для модулей по умолчанию

Для уменьшения связности модулей удобно исходить из того, что каждый модуль в своих настройках содержит имя ObjectManager'a, который он использует.

Для стандартизации настройки модулей предназначен интерфейс \Nnx\Doctrine\ObjectManager\ObjectManagerNameProviderInterface.

Если модуль использует nnx/module-options, то появляется унифицированная возможность доступа к настройкам модуля. Если класс, описывающий настройки модуля, реализует \Nnx\Doctrine\ObjectManager\ObjectManagerNameProviderInterface, то считается, что данный класс может предоставить имя ObjectManager'a по умолчанию для данного модуля.

Также есть трейт \Nnx\Doctrine\ObjectManager\ObjectManagerNameProviderTrait, реализующий методы, декларированные в \Nnx\Doctrine\ObjectManager\ObjectManagerNameProviderInterface.

Пример использования:


use Nnx\ModuleOptions\ModuleOptionsInterface;
use Nnx\Doctrine\ObjectManager\ObjectManagerNameProviderInterface;
use Nnx\Doctrine\ObjectManager\ObjectManagerNameProviderTrait;
use Zend\Stdlib\AbstractOptions;

/**
 * Class ModuleOptions
 */
class ModuleOptions extends AbstractOptions implements ModuleOptionsInterface, ObjectManagerNameProviderInterface
{
    use ObjectManagerNameProviderTrait;
}

Сервис для автоматического получения ObjectManager'a

Если модуль реализует поддержку стандартного механизма получения своих настроек (т.е. подходит под стандарты nnx/module-options), то есть возможность автоматически по имени любого класса, входящего в этот модуль, получать имя ObjectManager'a или сам ObjectManager'a.

Для этих целей предназначен сервис \Nnx\Doctrine\ObjectManager\ObjectManagerAutoDetectorInterface.

Базовое описание:

Метод Описание
getObjectManagerNameByClassName Получает имя используемого в модуле ObjectManager'a Doctrine по имени любого класса модуля
hasObjectManagerNameByClassName Проверяет, есть ли возможность по имени класса модуля получить имя objectManager'a, который используется в данном модуле
hasObjectManagerByClassName Проверяет, есть ли возможность по имени класса модуля получить objectManager'a, который используется в данном модуле
getObjectManagerByClassName По имени класса модуля получает objectManager, который используется в данном модуле

Пример использования:


use Nnx\Doctrine\ObjectManager\ObjectManagerAutoDetectorInterface;
use Nnx\Doctrine\PhpUnit\TestData\ObjectManagerAutoDetector as App;
use Doctrine\Common\Persistence\ObjectManager;

/** @var ObjectManagerAutoDetectorInterface $objectManagerAutoDetector */
$objectManagerAutoDetector = $serviceLocator->get(ObjectManagerAutoDetectorInterface::class);
/** @var ObjectManager $objectManager */
$objectManager = $objectManagerAutoDetector->getObjectManagerByClassName(App\TestModule1\Entity\TestEntity\TestEntityInterface::class);