EntityManager

Идеология

Для реализации сервисно-ориентированного подхода в модулях zf2 необходимо избегать явного создания сущностей Doctrine2 через new. Для создания расширяемых сервисов применяется подход, когда в коде идет работа с интерфейсом, а не с реализацией данного интерфейса.

EntityManager — это контейнер, используемыей для создания новых экземпляров сущностей.

Пример кода, в котором создается сущность Doctrine2:


use \Nnx\Doctrine\EntityManager\EntityManagerInterface

/** @var EntityManagerInterface $entityManager */
$entityManager = $appServiceManager->get(EntityManagerInterface::class);
/** @var TestEntityInterface $entity */
$entity = $entityManager->get(TestEntityInterface::class);

В примере выше при получении сущности $entity заранее не известно имя класса сущности, зато известно, что она должна реализовывать интерфейс TestEntityInterface.

Логика определения конкретного класса сущности, который будет имплементировать интерфейс TestEntityInterface, реализуется в контейнере \Nnx\Doctrine\EntityManager\EntityManagerInterface.

Описание плагин-менеджера \Nnx\Doctrine\EntityManager\EntityManagerInterface

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

Дополнительные методы \Nnx\Doctrine\EntityManager\EntityManagerInterface:

Метод Описание
getEntityClassByInterface Получение класса сущности по интерфейсу
hasEntityClassByInterface Проверяет, можно ли по имени интерфейса получить имя класса сущности