Я хотел бы спросить об использовании EventPublisher внутри агрегата.
class SomeAggregate
{
private $eventPublisher;
public function __construct(EventPublisher $eventPublisher)
{
$this->eventPublisher = $eventPublisher;
}
}
Когда я создаю SomeAggregate, я передаю EventPublisher конструктору, и все идет хорошо.
Но что делать, когда я получаю этот объект из базы данных.
Doctrine выполняет реконструкцию объекта на основе полей из таблицы и пропускает EventPublisher.
Как заставить Doctrine вводить EventPublisher каждый раз, когда он получает SomeAggregate из базы данных?
Мой предпочтительный способ, если таковой существует, — сопоставить свойство $ eventPublisher с классом EventPublisher.
С Слушатель событий доктрины.
services:
my.listener:
class: AppBundle\EventListener\EventPublisherInjector
arguments: [@event_publisher_service_id]
tags:
- { name: doctrine.event_listener, event: postLoad }
В AppBundle\EventListener\EventPublisherInjector
:
public function __construct(EventPublisher $eventPublisher)
{
$this->eventPublisher = $eventPublisher;
}
public function postLoad(LifecycleEventArgs $args)
{
$entity = $args->getEntity();
if ($entity instanceof SomeAggregate) {
$entity->setEventPublisher($this->eventPublisher);
}
}
http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html
http://doctrine-orm.readthedocs.org/en/latest/reference/events.html#postload
Других решений пока нет …