1. Go to this page and download the library: Download gpslab/domain-event-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
gpslab / domain-event-bundle example snippets
use GpsLab\Domain\Event\Event
class PurchaseOrderCreatedEvent implements Event
{
private $customer_id;
private $create_at;
public function __construct(CustomerId $customer_id, \DateTimeImmutable $create_at)
{
$this->customer_id = $customer_id;
$this->create_at = $create_at;
}
public function customerId(): CustomerId
{
return $this->customer_id;
}
public function createAt(): \DateTimeImmutable
{
return $this->create_at;
}
}
use GpsLab\Domain\Event\Aggregator\AbstractAggregateEvents;
final class PurchaseOrder extends AbstractAggregateEvents
{
private $customer_id;
private $create_at;
public function __construct(CustomerId $customer_id)
{
$this->customer_id = $customer_id;
$this->create_at = new \DateTimeImmutable();
$this->raise(new PurchaseOrderCreatedEvent($customer_id, $this->create_at));
}
}
use GpsLab\Domain\Event\Event;
class SendEmailOnPurchaseOrderCreated
{
private $mailer;
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}
public function onPurchaseOrderCreated(PurchaseOrderCreatedEvent $event): void
{
$message = $this->mailer
->createMessage()
->setTo('[email protected]')
->setBody(sprintf(
'Purchase order created at %s for customer #%s',
$event->createAt()->format('Y-m-d'),
$event->customerId()
));
$this->mailer->send($message);
}
}
use GpsLab\Domain\Event\Bus\EventBus;
// get event bus from DI container
$bus = $this->get(EventBus::class);
// do what you need to do on your Domain
$purchase_order = new PurchaseOrder(new CustomerId(1));
// this will clear the list of event in your AggregateEvents so an Event is trigger only once
$events = $purchase_order->pullEvents();
// You can have more than one event at a time.
foreach($events as $event) {
$bus->publish($event);
}
// You can use one method
//$bus->pullAndPublish($purchase_order);
use GpsLab\Domain\Event\Event;
class SendEmailOnPurchaseOrderCreated
{
private $mailer;
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}
public function __invoke(PurchaseOrderCreatedEvent $event): void
{
$message = $this->mailer
->createMessage()
->setTo('[email protected]')
->setBody(sprintf(
'Purchase order created at %s for customer #%s',
$event->createAt()->format('Y-m-d'),
$event->customerId()
));
$this->mailer->send($message);
}
}
use GpsLab\Domain\Event\Event;
use GpsLab\Domain\Event\Listener\Subscriber;
class SendEmailOnPurchaseOrderCreated implements Subscriber
{
private $mailer;
public function __construct(\Swift_Mailer $mailer)
{
$this->mailer = $mailer;
}
public static function subscribedEvents(): array
{
return [
PurchaseOrderCreatedEvent::class => ['onPurchaseOrderCreated'],
];
}
public function onPurchaseOrderCreated(PurchaseOrderCreatedEvent $event): void
{
$message = $this->mailer
->createMessage()
->setTo('[email protected]')
->setBody(sprintf(
'Purchase order created at %s for customer #%s',
$event->createAt()->format('Y-m-d'),
$event->customerId()
));
$this->mailer->send($message);
}
}
use GpsLab\Domain\Event\Queue\EventQueue;
$container->get(EventQueue::class)->publish($domain_event);
use GpsLab\Domain\Event\Queue\EventQueue;
$queue = $container->get(EventQueue::class);
$bus = $container->get(EventQueue::class);
while ($event = $queue->pull()) {
$bus->publish($event);
}
use GpsLab\Domain\Event\Queue\EventQueue;
$container->get(EventQueue::class)->publish($domain_event);
use GpsLab\Domain\Event\Queue\EventQueue;
$container->get(EventQueue::class)->subscribe(function (Event $event) {
// do somthing
});
$event = new PurchaseOrderCreatedEvent(
new CustomerId(1),
new \DateTimeImmutable()
);
$container->get('acme.domain.purchase_order.event.queue')->publish($event);
$event = new ArticleCommentedEvent(
new ArticleId(1),
new AuthorId(1),
$comment
new \DateTimeImmutable()
);
$container->get('acme.domain.article_comment.event.queue')->publish($event);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.