PHP code example of tweekersnut / event-dispatcher

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

    

tweekersnut / event-dispatcher example snippets




use EventDispatcher\EventDispatcher;
use EventDispatcher\Event;

// Create dispatcher instance
$dispatcher = new EventDispatcher();

// Listen to an event
$dispatcher->listen('user.created', function ($event) {
    echo "User created: " . $event->getData('name');
});

// Dispatch an event
$event = new Event('user.created', ['name' => 'John Doe']);
$dispatcher->dispatch($event);

use EventDispatcher\Laravel\Facades\EventDispatcher;
use EventDispatcher\Event;

// Listen to an event
EventDispatcher::listen('user.created', function ($event) {
    Log::info('User created: ' . $event->getData('name'));
});

// Dispatch an event
$event = new Event('user.created', ['name' => 'John Doe']);
EventDispatcher::dispatch($event);


EventDispatcher\EventDispatcher;
use EventDispatcher\Event;

$dispatcher = new EventDispatcher();

// Your event handling code here


use EventDispatcher\Laravel\Facades\EventDispatcher;

// Use the facade anywhere in your Laravel app
EventDispatcher::listen('event.name', function($event) {
    // Handle event
});

use EventDispatcher\EventDispatcher;

$dispatcher = new EventDispatcher();

// Register a listener
$dispatcher->listen('order.placed', function ($event) {
    // Handle the event
    echo "Order placed: " . $event->getData('order_id');
});

// Dispatch the event
$dispatcher->dispatch('order.placed', ['order_id' => 123]);

use EventDispatcher\Event;

// Create an event with data
$event = new Event('user.registered', [
    'name' => 'Jane Doe',
    'email' => '[email protected]'
]);

// Dispatch the event
$dispatcher->dispatch($event);

use EventDispatcher\Event;

class UserRegisteredEvent extends Event
{
    private $user;

    public function __construct(array $user)
    {
        parent::__construct('user.registered');
        $this->user = $user;
    }

    public function getUser(): array
    {
        return $this->user;
    }
}

// Dispatch custom event
$dispatcher->dispatch(new UserRegisteredEvent([
    'name' => 'John',
    'email' => '[email protected]'
]));

$dispatcher->listen('user.created', function ($event) {
    // Handle event
});

use EventDispatcher\Contracts\ListenerInterface;

class SendWelcomeEmail implements ListenerInterface
{
    public function handle($event): void
    {
        $user = $event->getData('user');
        // Send email logic
    }
}

// Register the listener
$dispatcher->listen('user.created', SendWelcomeEmail::class);
// or
$dispatcher->listen('user.created', new SendWelcomeEmail());

$dispatcher->listen('order.placed', function ($event) {
    echo "3. Send confirmation";
}, 0);

$dispatcher->listen('order.placed', function ($event) {
    echo "1. Validate order";
}, 100);

$dispatcher->listen('order.placed', function ($event) {
    echo "2. Process payment";
}, 50);

use EventDispatcher\Subscriber;

class UserEventSubscriber extends Subscriber
{
    public function getSubscribedEvents(): array
    {
        return [
            'user.created' => 'onUserCreated',
            'user.updated' => ['method' => 'onUserUpdated', 'priority' => 10],
            'user.deleted' => [
                ['method' => 'onUserDeleted', 'priority' => 5],
                'logUserDeletion'
            ]
        ];
    }

    public function onUserCreated($event): void
    {
        // Handle user created
    }

    public function onUserUpdated($event): void
    {
        // Handle user updated
    }

    public function onUserDeleted($event): void
    {
        // Handle user deleted
    }

    public function logUserDeletion($event): void
    {
        // Log deletion
    }
}

// Register the subscriber
$dispatcher->subscribe(new UserEventSubscriber());

$dispatcher->listen('user.login', function ($event) {
    if ($event->getData('user')->isBanned()) {
        return false; // Stop propagation
    }
}, 100);

$dispatcher->listen('user.login', function ($event) {
    // This won't execute if user is banned
}, 50);

// Check if event has listeners
if ($dispatcher->hasListeners('user.created')) {
    // Event has listeners
}

// Get all listeners for an event
$listeners = $dispatcher->getListeners('user.created');

// Remove all listeners for an event
$dispatcher->forget('user.created');

// Remove specific listener
$listener = function ($event) { /* ... */ };
$dispatcher->listen('user.created', $listener);
$dispatcher->forget('user.created', $listener);

// Get all registered events
$events = $dispatcher->getEvents();

// Clear all listeners
$dispatcher->clear();

use EventDispatcher\Contracts\DispatcherInterface;

class UserController extends Controller
{
    protected $dispatcher;

    public function __construct(DispatcherInterface $dispatcher)
    {
        $this->dispatcher = $dispatcher;
    }

    public function store(Request $request)
    {
        $user = User::create($request->all());
        $this->dispatcher->dispatch('user.created', $user);
        
        return response()->json($user);
    }
}

return [
    'subscribers' => [
        \App\Subscribers\UserEventSubscriber::class,
        \App\Subscribers\OrderEventSubscriber::class,
    ],
];

use EventDispatcher\EventDispatcher;

$dispatcher = new EventDispatcher();

$eventDispatched = false;
$dispatcher->listen('test.event', function () use (&$eventDispatched) {
    $eventDispatched = true;
});

$dispatcher->dispatch('test.event');

assert($eventDispatched === true);
bash
php examples/core-php/basic-usage.php
bash
php run-examples.php
bash
# Run basic usage example
php vendor/tweekersnut/event-dispatcher/examples/core-php/basic-usage.php

# Or if you cloned the repository
php examples/core-php/basic-usage.php
bash
php artisan vendor:publish --tag=event-dispatcher-config
bash
php run-examples.php
bash
php examples/core-php/basic-usage.php
php examples/core-php/listener-classes.php
php examples/core-php/subscriber-example.php