域驱动设计 - 聚合 - 带有Doctrine的EventPublisher

时间:2015-08-07 22:06:35

标签: php symfony doctrine-orm event-handling domain-driven-design

我想问一下在聚合中使用EventPublisher。

class SomeAggregate
{

    private $eventPublisher;

    public function __construct(EventPublisher $eventPublisher)
    {
        $this->eventPublisher = $eventPublisher;
    }


}   

当我创建SomeAggregate时,我将EventPublisher传递给构造函数,一切都很顺利。

但是当我从数据库中检索这个对象时呢。 Doctrine根据表中的字段重建对象,并跳过EventPublisher。

如何在每次从数据库中检索SomeAggregate时让Doctrine注入EventPublisher?

如果存在,我首选的方法是将$ eventPublisher属性映射到EventPublisher类。

1 个答案:

答案 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