Doctrine 2 + ZF2: создание сущностей через ServiceManager

В приложении Zend Framework 2 у меня есть несколько сущностей Doctrine2, которые имеют зависимости, которые внедряются в них с помощью ServiceManager, т.е. е. Заказу нужен новый Счет каждый раз, когда он создается.

'service_manager' => [
'invokables' => [
'Sales\Entity\Invoice' => 'Sales\Entity\Invoice'
],
'factories' => [
'Sales\Entity\Order' => function($sm) {
$order = new \Sales\Entity\Order();
$order->setInvoice($sm->get('Sales\Entity\Invoice'));
return $order;
}
],
'shared' => [
'Sales\Entity\Invoice' => false,
'Sales\Entity\Order' => false
]
]

С этой конфигурацией нет проблем создать новый Заказ, которому назначен новый Счет в любом месте приложения, потому что, например, внутри контроллера я могу просто вызвать

$order = $this->getServiceLocator()->get('serviceManager')->get('Sales\Entity\Order');

Однако при получении Order через EntityRepository зависимости не будут внедрены, потому что, насколько мне известно, Doctrine создает экземпляр объекта, вызывая его конструктор и затем клонируя этот экземпляр всякий раз, когда ему нужен другой. Доктрина, таким образом, обходит ServiceManager и, следовательно, внедрение зависимостей.

И. е.

$order = $entityManager->getRepository('Sales\Entity\Order')->find(42);

даст мне заказ без нового счета.

Я знаю, что непосредственное внедрение зависимостей в сущности может быть не лучшим решением, но в данный момент мы работаем с толстыми моделями в нашем приложении без уровня обслуживания моделей, и для быстрого исправления я должен заставить это работать. Рефакторинг запланирован на будущее, но пока не подлежит обсуждению.

Можно ли изменить способ, которым Учение создает новую сущность? Я заглянул в EntityManager и EntityRepository, но пока не нашел решения.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]