Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Domain Driven Design - Aggregates - EventPublisher with Doctrine

I would like to ask about using EventPublisher inside aggregate.

class SomeAggregate
{

    private $eventPublisher;

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


}   

When I create SomeAggregate I pass EventPublisher to the constructor and everything goes fine.

But what about when I retrieve this object from database. Doctrine makes reconstruction of the object based on the fields from table and will skip EventPublisher.

How to make Doctrine inject EventPublisher every time it retrieves SomeAggregate from database?

My prefered way, if such exists, is to map $eventPublisher property to EventPublisher class.

like image 666
Dariss Avatar asked Dec 13 '25 06:12

Dariss


1 Answers

With a Doctrine Event Listener.

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

In 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

like image 79
Absalón Valdés Avatar answered Dec 15 '25 20:12

Absalón Valdés