PHP code example of memran / marwa-event

1. Go to this page and download the library: Download memran/marwa-event 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/ */

    

memran / marwa-event example snippets


use Marwa\Event\Bus\EventBus;
use Marwa\Event\Core\EventDispatcher;
use Marwa\Event\Core\ListenerProvider;
use Marwa\Event\Resolver\ListenerResolver;

$resolver = new ListenerResolver();
$provider = new ListenerProvider($resolver);
$dispatcher = new EventDispatcher($provider);
$bus = new EventBus($provider, $dispatcher);

$bus->listen(UserRegistered::class, SendWelcomeMail::class, 100);
$bus->listen(UserRegistered::class, [AuditListener::class, 'handle'], 50);
$bus->listen(UserRegistered::class, static function (UserRegistered $event): void {
    // metrics or notifications
}, 10);

$bus->dispatch(new UserRegistered('[email protected]'));

use Marwa\Event\Contracts\StoppableEvent;

final class UserRegistered extends StoppableEvent
{
    public function __construct(public string $email) {}
}

use Marwa\Event\Contracts\Subscriber;

final class UserSubscriber implements Subscriber
{
    public static function getSubscribedEvents(): array
    {
        return [
            UserRegistered::class => [
                ['sendWelcome', 100],
                ['audit', 50],
            ],
        ];
    }

    public function sendWelcome(UserRegistered $event): void {}

    public function audit(UserRegistered $event): void {}
}

$bus->subscribe(new UserSubscriber());

$listenerId = $bus->listen(UserRegistered::class, SendWelcomeMail::class, 100);

$bus->forget($listenerId);

interface DomainEvent {}

class BaseOrderEvent implements DomainEvent {}

final class OrderPlaced extends BaseOrderEvent {}

$bus->listen(DomainEvent::class, LogDomainEvent::class, 100);
$bus->listen(BaseOrderEvent::class, UpdateReadModel::class, 50);
$bus->listen(OrderPlaced::class, SendOrderEmail::class, 10);

$bus->dispatch(new OrderPlaced());

use Marwa\Event\Bus\EventBus;
use Marwa\Event\Core\EventDispatcher;
use Marwa\Event\Core\ListenerProvider;
use Marwa\Event\Resolver\ListenerResolver;

$resolver = new ListenerResolver($container);
$provider = new ListenerProvider($resolver);
$dispatcher = new EventDispatcher($provider);
$bus = new EventBus($provider, $dispatcher, $container);

$bus->listen(UserRegistered::class, SendWelcomeMail::class);
$bus->subscribe(UserSubscriber::class);

$dispatcher = new EventDispatcher($provider, swallowExceptions: true);
$bus = new EventBus($provider, $dispatcher);