gbprod / domain-event-bundle
此包已被废弃,不再维护。未建议替代包。
将领域事件库集成到Symfony应用程序中
v0.1.1
2016-03-12 08:08 UTC
Requires
- gbprod/domain-event: ^0.1
- symfony/framework-bundle: ^2.3|^3.0
Requires (Dev)
- phpunit/phpunit: 4.*
This package is auto-updated.
Last update: 2020-06-07 07:56:55 UTC
README
将领域事件库集成到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' }