Skip to content

Latest commit

 

History

History
112 lines (87 loc) · 3.09 KB

listener.md

File metadata and controls

112 lines (87 loc) · 3.09 KB

Event listener

You can use any implementations of callable type as a event listener.

The event listener can be a anonymous function:

$listener = function (PurchaseOrderCreatedEvent $event) {
    // do something
};

// register event listener in listener locator
$locator = new DirectBindingEventListenerLocator();
$locator->register(PurchaseOrderCreatedEvent::class, $listener);

It can be a some function:

function PurchaseOrderCreatedListener(PurchaseOrderCreatedEvent $event)
{
    // do something
}

// register event listener in listener locator
$locator = new DirectBindingEventListenerLocator();
$locator->register(PurchaseOrderCreatedEvent::class, 'PurchaseOrderCreatedListener');

It can be a called object:

class PurchaseOrderCreatedListener
{
    public function __invoke(PurchaseOrderCreatedEvent $event)
    {
        // do something
    }
}

// register event listener in listener locator
$locator = new DirectBindingEventListenerLocator();
$locator->register(PurchaseOrderCreatedEvent::class, new PurchaseOrderCreatedListener());

It can be a static method of class:

class PurchaseOrderCreatedListener
{
    public static function handlePurchaseOrderCreated(PurchaseOrderCreatedEvent $event)
    {
        // do something
    }
}

// register event listener in listener locator
$locator = new DirectBindingEventListenerLocator();
$locator->register(PurchaseOrderCreatedEvent::class, 'PurchaseOrderCreatedListener::handlePurchaseOrderCreated');

It can be a public method of class:

class PurchaseOrderCreatedListener
{
    public function handlePurchaseOrderCreated(PurchaseOrderCreatedEvent $event)
    {
        // do something
    }
}

// register event listener in listener locator
$locator = new DirectBindingEventListenerLocator();
$locator->register(PurchaseOrderCreatedEvent::class, [new PurchaseOrderCreatedListener(), 'handlePurchaseOrderCreated']);

You can handle many events in one listener.

class PurchaseOrderListener
{
    public function handlePurchaseOrderCreated(PurchaseOrderCreatedEvent $event)
    {
        // do something
    }

    public function handlePurchaseOrderCompleted(PurchaseOrderCompletedEvent $event)
    {
        // do something
    }
}

$listener = new PurchaseOrderListener();

// register event listener in listener locator
$locator = new DirectBindingEventListenerLocator();
$locator->register(PurchaseOrderCreatedEvent::class, [$listener, 'handlePurchaseOrderCreated']);
$locator->register(PurchaseOrderCompletedEvent::class, [$listener, 'handlePurchaseOrderCompleted']);

Listener locator

You can use exists locators of listener:

Or you can create custom locator that implements GpsLab\Domain\Event\Listener\Locator\EventListenerLocator interface.