PHP code example of componenta / event

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

    

componenta / event example snippets


use Componenta\Event\EventDispatcher;
use Componenta\Event\Provider\ListenerProvider;

$provider = new ListenerProvider();
$provider->addListener(UserRegistered::class, fn(UserRegistered $e) => sendWelcomeEmail($e->user));

$dispatcher = new EventDispatcher($provider);
$dispatcher->dispatch(new UserRegistered($user));

$dispatcher = new EventDispatcher($provider);
$event = $dispatcher->dispatch(new OrderPlaced(...));  // returns the event
$fork  = $dispatcher->withProvider($otherProvider);    // new instance

$provider = new ListenerProvider();

$off = $provider->addListener(PostPublished::class, $handler);
$off();  // removes the listener

$provider->removeListener(PostPublished::class, $handler);  // bool
$provider->has(PostPublished::class);                       // bool
$provider->contains(PostPublished::class, $handler);        // bool

use Componenta\Event\Provider\PrioritizedProvider;
use Componenta\Event\Provider\SortMode;

$provider = new PrioritizedProvider(mode: SortMode::DESC);   // default
$provider->addListener(CommentPosted::class, $auditHandler, priority: 100);
$provider->addListener(CommentPosted::class, $defaultHandler);  // 0 by default

use Componenta\Event\Provider\PrioritizedListenerInterface;

final class LogAuditEvent implements PrioritizedListenerInterface
{
    public int $priority { get => 1000; }

    public function __invoke(AuditEvent $event): void { /* ... */ }
}

$provider->addListener(AuditEvent::class, new LogAuditEvent());  // priority 1000 from interface

use Componenta\Event\Provider\CompositeProvider;

$composite = new CompositeProvider([$coreProvider, $moduleProvider]);
$composite->add($pluginProvider);

$dispatcher = new EventDispatcher($composite);

$provider->addListeners([
    PostPublished::class => [$sendDigest, $updateIndex],
    CommentPosted::class => $notifyAuthor,
]);

// Prioritized: [callable, int] pairs or bare callables within one group
$prio->addListeners([
    AuditEvent::class => [
        [$rotateLogs,  100],
        [$persistAudit, 50],
        $defaultLogger,        // priority 0 or from interface
    ],
]);

$off = null;
$off = $provider->addListener(Booted::class, function (Booted $e) use (&$off) {
    $off();         // unsubscribe before running (re-entrancy safe)
    initialize($e);
});

function withTemporaryListener(ListenerProvider $p, string $event, callable $h, callable $block): mixed
{
    $off = $p->addListener($event, $h);
    try { return $block(); }
    finally { $off(); }
}