1. Go to this page and download the library: Download olvlvl/event-dispatcher 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/ */
olvlvl / event-dispatcher example snippets
use olvlvl\EventDispatcher\BasicEventDispatcher;
/* @var Psr\EventDispatcher\ListenerProviderInterface $listenerProvider */
/* @var object $event */
$dispatcher = new BasicEventDispatcher($listenerProvider);
$dispatcher->dispatch($event);
use olvlvl\EventDispatcher\BufferedEventDispatcher;
/* @var Psr\EventDispatcher\EventDispatcherInterface $decorated */
/* @var object $eventA */
/* @var SampleInterface $eventB */
/* @var object $eventC */
$dispatcher = new BufferedEventDispatcher(
$decorated,
// An optional discriminator
function (object $event): bool {
return !$event instanceof SampleInterface;
}
);
$dispatcher->dispatch($eventA);
// $eventB is dispatched immediately
$dispatcher->dispatch($eventB);
$dispatcher->dispatch($eventC);
// ... Some code here, maybe reply to a request.
$dispatchedEvents = $dispatcher->dispatchBufferedEvents();
use olvlvl\EventDispatcher\MutableListenerProviderInterface;
/* @var Psr\EventDispatcher\ListenerProviderInterface $provider */
if ($provider instanceof MutableListenerProviderInterface) {
// ... we can add or remove Listeners.
}
use olvlvl\EventDispatcher\MutableListenerProvider;
$provider = new MutableListenerProvider();
$remove = $provider->appendListenerForEvent(
SampleEvent::class,
function (SampleEvent $event) use (&$remove): void {
// This is how one can implement a "once" listener.
// The listener is removed when it's called.
$remove();
// ... do something with the event here.
}
);
use olvlvl\EventDispatcher\ListenerProviderChain;
// Compose a Listener Provider from a number of Listener Providers.
/* @var $providerA olvlvl\EventDispatcher\MutableListenerProvider */
/* @var $providerB olvlvl\EventDispatcher\ListenerProviderWithMap */
/* @var $providerC olvlvl\EventDispatcher\ListenerProviderWithContainer */
$provider = new ListenerProviderChain([ $providerA, $providerB, $providerC ]);
// Listener Providers can be added to the end of the chain.
/* @var $providerD Psr\EventDispatcher\ListenerProviderInterface */
/* @var $providerE Psr\EventDispatcher\ListenerProviderInterface */
$provider->appendListenerProviders($providerD, $providerE);
// Listener Providers can be added to the beginning of the chain.
/* @var $providerF Psr\EventDispatcher\ListenerProviderInterface */
/* @var $providerG Psr\EventDispatcher\ListenerProviderInterface */
$provider->prependListenerProviders($providerF, $providerG);
// Obtain the Listeners for an event
/* @var object $event */
foreach ($provider->getListenersForEvent($event) as $listener) {
// ... do something with the listeners
}
use olvlvl\EventDispatcher\ListenerProviderFilter;
use olvlvl\EventDispatcher\ListenerProviderWithMap;
/* @var callable $listener_1 */
/* @var callable $listener_2 */
$provider = new ListenerProviderFilter(
new ListenerProviderWithMap([
SampleEventA::class => [ $listener_1, $listener_2 ],
SampleEventC::class => [ $listener_1, $listener_2 ],
]),
function (object $event, callable $listener) use ($listener_1, $listener_2): bool {
if ($event instanceof SampleEventA && $listener === $listener_1) {
return false;
}
if ($event instanceof SampleEventC && $listener === $listener_2) {
return false;
}
return true;
}
);
use Symfony\Component\DependencyInjection\ContainerBuilder;
use olvlvl\EventDispatcher\Symfony\ListenerProviderPass;
$container = new ContainerBuilder();
$container->addCompilerPass(new ListenerProviderPass());
use Symfony\Component\DependencyInjection\ContainerBuilder;
use olvlvl\EventDispatcher\Symfony\ListenerProviderPass;
$container = new ContainerBuilder();
$container->addCompilerPass(new ListenerProviderPass('my_listener_provider_tag'));
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.