0
0
Laravelframework~5 mins

Event subscribers in Laravel

Choose your learning style9 modes available
Introduction

Event subscribers let you group event handling methods in one class. This keeps your code organized and easy to manage.

You want to handle multiple related events in one place.
You want to keep event listener logic clean and reusable.
You want to separate event handling from other parts of your app.
You want to register event handlers dynamically in one class.
Syntax
Laravel
class UserEventSubscriber
{
    public function onUserLogin($event)
    {
        // Handle user login event
    }

    public function onUserLogout($event)
    {
        // Handle user logout event
    }

    public function subscribe($events)
    {
        $events->listen(
            'App\Events\UserLoggedIn',
            [UserEventSubscriber::class, 'onUserLogin']
        );

        $events->listen(
            'App\Events\UserLoggedOut',
            [UserEventSubscriber::class, 'onUserLogout']
        );
    }
}

The subscribe method registers event handlers.

Each handler method receives the event object as a parameter.

Examples
This subscriber listens for the OrderPlaced event and runs onOrderPlaced when it happens.
Laravel
class OrderEventSubscriber
{
    public function onOrderPlaced($event)
    {
        // Code to run when order is placed
    }

    public function subscribe($events)
    {
        $events->listen('App\Events\OrderPlaced', [self::class, 'onOrderPlaced']);
    }
}
This subscriber handles two product-related events in one class.
Laravel
class ProductEventSubscriber
{
    public function onProductCreated($event)
    {
        // Handle product created event
    }

    public function onProductDeleted($event)
    {
        // Handle product deleted event
    }

    public function subscribe($events)
    {
        $events->listen('App\Events\ProductCreated', [self::class, 'onProductCreated']);
        $events->listen('App\Events\ProductDeleted', [self::class, 'onProductDeleted']);
    }
}
Sample Program

This example shows a subscriber class handling user login and logout events. When events are dispatched, the subscriber methods print messages with the user's name.

Laravel
<?php

namespace App\Listeners;

class UserEventSubscriber
{
    public function onUserLogin($event)
    {
        echo "User logged in: {$event->user->name}\n";
    }

    public function onUserLogout($event)
    {
        echo "User logged out: {$event->user->name}\n";
    }

    public function subscribe($events)
    {
        $events->listen('App\Events\UserLoggedIn', [self::class, 'onUserLogin']);
        $events->listen('App\Events\UserLoggedOut', [self::class, 'onUserLogout']);
    }
}

// Simulate event objects
class User {
    public $name;
    public function __construct($name) { $this->name = $name; }
}

class UserLoggedIn {
    public $user;
    public function __construct($user) { $this->user = $user; }
}

class UserLoggedOut {
    public $user;
    public function __construct($user) { $this->user = $user; }
}

// Simulate event dispatcher
class EventDispatcher {
    protected $listeners = [];

    public function listen($eventName, $callback) {
        $this->listeners[$eventName][] = $callback;
    }

    public function dispatch($event) {
        $eventName = get_class($event);
        if (!empty($this->listeners[$eventName])) {
            foreach ($this->listeners[$eventName] as $listener) {
                call_user_func($listener, $event);
            }
        }
    }

    public function subscribe($subscriber) {
        $subscriber->subscribe($this);
    }
}

// Usage
$dispatcher = new EventDispatcher();
$subscriber = new \App\Listeners\UserEventSubscriber();
$dispatcher->subscribe($subscriber);

$user = new User('Alice');
$dispatcher->dispatch(new UserLoggedIn($user));
$dispatcher->dispatch(new UserLoggedOut($user));
OutputSuccess
Important Notes

Register your subscriber in EventServiceProvider under the $subscribe property.

Subscribers help keep event handling code clean and grouped logically.

Summary

Event subscribers group multiple event handlers in one class.

They register handlers using the subscribe method.

This keeps your app organized and easier to maintain.