Php 领域驱动设计-聚合-带条令的EventPublisher

Php 领域驱动设计-聚合-带条令的EventPublisher,php,symfony,doctrine-orm,event-handling,domain-driven-design,Php,Symfony,Doctrine Orm,Event Handling,Domain Driven Design,我想询问有关在聚合中使用EventPublisher的问题 class SomeAggregate { private $eventPublisher; public function __construct(EventPublisher $eventPublisher) { $this->eventPublisher = $eventPublisher; } } 当我创建一些聚合时,我将EventPublisher传递给构造

我想询问有关在聚合中使用EventPublisher的问题

class SomeAggregate
{

    private $eventPublisher;

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


}   
当我创建一些聚合时,我将EventPublisher传递给构造函数,一切正常

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

如何使发布者在每次从数据库中检索某个聚合时都能插入事件


如果存在,我更喜欢的方法是将$eventPublisher属性映射到eventPublisher类。

使用原则事件侦听器

services:
    my.listener:
        class: AppBundle\EventListener\EventPublisherInjector
        arguments: [@event_publisher_service_id]
        tags:
            - { name: doctrine.event_listener, event: postLoad }
AppBundle\EventListener\eventpublisherinject
中:

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

public function postLoad(LifecycleEventArgs $args)
{
    $entity = $args->getEntity();
    if ($entity instanceof SomeAggregate) {
         $entity->setEventPublisher($this->eventPublisher);
    }
} 


基本上你不能。不过,看看这个方法:谢谢你,伙计。我不喜欢这种处理事件的方式,因为事件不是独立的类,我很难做到这一点,但经过一些修改,我可以使用这种方法。首先,我将事件更改为类,其次,我将事件数组保留为类中的属性(与示例中完全相同)。接下来,我将有一个从聚合和所有子实体返回事件的方法。因此,我将从域外收集这些事件并发布它们。您的回答很好,但由于@Cerad,我找到了更好的解决方案:)