0
0
LaravelHow-ToBeginner · 4 min read

How to Create Listener in Laravel: Step-by-Step Guide

In Laravel, you create a listener by defining a class that handles an event, usually generated with php artisan make:listener. Then, you register the listener in the EventServiceProvider to link it to the event it listens for.
📐

Syntax

To create a listener in Laravel, use the Artisan command to generate a listener class. Then, register the listener in app/Providers/EventServiceProvider.php under the $listen array.

  • Listener class: Handles the event logic.
  • EventServiceProvider: Maps events to listeners.
bash
php artisan make:listener ExampleListener --event=ExampleEvent

// In app/Providers/EventServiceProvider.php
protected $listen = [
    ExampleEvent::class => [
        ExampleListener::class,
    ],
];
💻

Example

This example shows how to create a listener that handles a user registration event by sending a welcome email.

php
<?php

namespace App\Events;

class UserRegistered
{
    public $user;

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

// Listener
namespace App\Listeners;

use App\Events\UserRegistered;

class SendWelcomeEmail
{
    public function handle(UserRegistered $event)
    {
        // Logic to send email to $event->user
        echo "Welcome email sent to " . $event->user->email . "\n";
    }
}

// EventServiceProvider.php
protected $listen = [
    UserRegistered::class => [
        SendWelcomeEmail::class,
    ],
];

// Simulate event firing
$user = (object) ['email' => 'user@example.com'];
$event = new UserRegistered($user);
$listener = new SendWelcomeEmail();
$listener->handle($event);
Output
Welcome email sent to user@example.com
⚠️

Common Pitfalls

Common mistakes when creating listeners in Laravel include:

  • Not registering the listener in EventServiceProvider, so it never runs.
  • Forgetting to import the event or listener classes with use statements.
  • Not type-hinting the event in the listener's handle method, causing Laravel to not inject the event.
php
<?php
// Wrong: Missing event registration
// EventServiceProvider.php
protected $listen = [
    // UserRegistered::class => [SendWelcomeEmail::class], // Missing this line
];

// Right: Register listener properly
protected $listen = [
    UserRegistered::class => [
        SendWelcomeEmail::class,
    ],
];
📊

Quick Reference

StepDescription
1. Generate ListenerRun php artisan make:listener ListenerName --event=EventName
2. Register ListenerAdd listener class to $listen array in EventServiceProvider
3. Define Handle MethodWrite logic inside handle(Event $event) method
4. Fire EventTrigger event with event(new EventName($data))
5. Test ListenerEnsure listener runs when event fires

Key Takeaways

Create listeners using Artisan with the --event option to link them to events.
Always register your listeners in the EventServiceProvider's $listen array.
The listener's handle method must type-hint the event class to receive event data.
Forgetting to register listeners is the most common reason they don't run.
Test your listeners by firing events and checking their effects.