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']);
You can use exists locators of listener:
Or you can create custom locator that implements GpsLab\Domain\Event\Listener\Locator\EventListenerLocator
interface.