我想问一下在聚合中使用EventPublisher。
class SomeAggregate
{
private $eventPublisher;
public function __construct(EventPublisher $eventPublisher)
{
$this->eventPublisher = $eventPublisher;
}
}
当我创建SomeAggregate时,我将EventPublisher传递给构造函数,一切都很顺利。
但是当我从数据库中检索这个对象时呢。 Doctrine根据表中的字段重建对象,并跳过EventPublisher。
如何在每次从数据库中检索SomeAggregate时让Doctrine注入EventPublisher?
如果存在,我首选的方法是将$ eventPublisher属性映射到EventPublisher类。
答案 0 :(得分:3)
使用 Doctrine事件监听器。
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