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
usestatements. - Not type-hinting the event in the listener's
handlemethod, 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
| Step | Description |
|---|---|
| 1. Generate Listener | Run php artisan make:listener ListenerName --event=EventName |
| 2. Register Listener | Add listener class to $listen array in EventServiceProvider |
| 3. Define Handle Method | Write logic inside handle(Event $event) method |
| 4. Fire Event | Trigger event with event(new EventName($data)) |
| 5. Test Listener | Ensure 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.