gbprod/domain-event-bundle

此包已被废弃,不再维护。未建议替代包。

将领域事件库集成到Symfony应用程序中

安装: 128

依赖者: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分叉: 0

开放问题: 0

类型:bundle

v0.1.1 2016-03-12 08:08 UTC

This package is auto-updated.

Last update: 2020-06-07 07:56:55 UTC


README

stability-deprecated

Build Status Scrutinizer Code Quality Code Coverage

Latest Stable Version Total Downloads Latest Unstable Version License

领域事件库集成到Symfony应用程序中

安装

使用composer

composer require gbprod/domain-event-bundle

更新你的app/AppKernel.php文件

public function registerBundles()
{
    $bundles = array(
        new GBProd\DomainEventBundle\DomainEventBundle(),
    );
}

设置你的实体

使用领域事件库来引发事件

<?php

namespace GBProd\Acme\Entity;

use GBProd\DomainEvent\EventProvider;
use GBProd\DomainEvent\EventProviderTrait;

final class MyEntity implements EventProvider
{
    use EventProviderTrait;

    public function doSomething()
    {
        $this->raise(
            new SomethingHappenedEvent($this->id)
        );
    }
}

从你的仓库中分发事件

使用Doctrine仓库的示例

<?php

namespace GBProd\AcmeBundle\Repository;

use GBProd\DomainEvent\EventProvider;
use GBProd\DomainEvent\Dispatcher;

class MyEntityRepository
{
    public function __construct(EntityManager $em, DomainEventDispatcher $dispatcher)
    {
        $this->em         = $em;
        $this->dispatcher = $dispatcher;
    }
    
    public function save(MyEntity $entity)
    {
        $this->em->persist($entity);
        $this->em->flush();
        
        $this->dispatcher->dispatch($entity);
    }
}
# src/GBProd/AcmeBundle/Resourses/config/services.yml
services:
    gbprod_acme.my_entity_repository:
        class: GBProd\AcmeBundle\Repository\MyEntityRepository
        arguments:
            - "@doctrine.entity_manager"
            - "@gbprod.domain_event_dispatcher"

这将使用Symfony 事件分发器分发事件。事件名称将是聚合体和事件的类名(在这个例子中是MyEntity.SomethingHappenedEvent)。

创建你的监听器

<?php

namespace GBProd\AcmeBundle\Listener;

use Symfony\Component\EventDispatcher\Event;

class MyListener
{
    public function onSomethingHappened(Event $event) 
    {
        $domainEvent = $event->getDomainEvent();
        
        // Use it now
    }
}

注册你的监听器

gbprod_acme.event_listener.my_listener:
    class: GBProd\AcmeBundle\Listener\MyListener
    tags:
        - { name: kernel.event_listener, event: MyEntity.SomethingHappenedEvent, method: 'onSomethingHappened' }