Jump into concepts and practice - no test required
or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Creating Event Listeners in Laravel
📖 Scenario: You are building a Laravel application that needs to send a welcome email whenever a new user registers.
🎯 Goal: Create an event listener that listens for the UserRegistered event and triggers a welcome email to the new user.
📋 What You'll Learn
Create an event class called UserRegistered with a public property $user.
Create a listener class called SendWelcomeEmail that handles the UserRegistered event.
Register the listener in the EventServiceProvider.
Dispatch the UserRegistered event with a user instance.
💡 Why This Matters
🌍 Real World
Events and listeners help keep your Laravel app organized by separating actions triggered by events like user registration.
💼 Career
Understanding Laravel events and listeners is essential for building scalable and maintainable web applications.
Progress0 / 4 steps
1
Create the UserRegistered event class
Create an event class called UserRegistered inside app/Events with a public property $user and a constructor that accepts a $user parameter and assigns it to the property.
Laravel
Hint
Use php artisan make:event UserRegistered to generate the event class, then add the $user property and constructor.
2
Create the SendWelcomeEmail listener class
Create a listener class called SendWelcomeEmail inside app/Listeners with a handle method that accepts a UserRegistered event instance.
Laravel
Hint
Use php artisan make:listener SendWelcomeEmail --event=UserRegistered to generate the listener class.
3
Register the listener in EventServiceProvider
In app/Providers/EventServiceProvider.php, add the UserRegistered event and its listener SendWelcomeEmail to the $listen array.
Laravel
Hint
Open EventServiceProvider.php and add the event and listener classes to the $listen array.
4
Dispatch the UserRegistered event
In your controller or service, dispatch the UserRegistered event by creating a new instance with a $user object and calling event() with it.
Laravel
Hint
Use the event() helper function to dispatch the UserRegistered event with the $user instance.
Practice
(1/5)
1. What is the main purpose of creating listeners in Laravel?
easy
A. To define database migrations
B. To respond automatically when specific events happen
C. To create routes for web requests
D. To handle user authentication manually
Solution
Step 1: Understand what listeners do
Listeners are designed to respond automatically when events occur in the application.
Step 2: Compare with other options
Options B, C, and D relate to migrations, routing, and authentication, which are not the main purpose of listeners.
Final Answer:
To respond automatically when specific events happen -> Option B
Quick Check:
Listeners respond to events = A [OK]
Hint: Listeners react to events automatically in Laravel [OK]
Common Mistakes:
Confusing listeners with routes or migrations
Thinking listeners handle authentication directly
Believing listeners are manually triggered
2. Which of the following is the correct artisan command to create a listener named UserRegisteredListener?
easy
A. php artisan create:listener UserRegisteredListener
B. php artisan make:event UserRegisteredListener
C. php artisan listener:create UserRegisteredListener
D. php artisan make:listener UserRegisteredListener
Solution
Step 1: Recall the artisan command for listeners
The correct command to create a listener is php artisan make:listener ListenerName.
Step 2: Check other options
Options A and C use incorrect command formats, and D creates an event, not a listener.
Final Answer:
php artisan make:listener UserRegisteredListener -> Option D
Quick Check:
Use make:listener to create listeners [OK]
Hint: Use 'make:listener' to create listeners with artisan [OK]
Common Mistakes:
Using 'create:listener' instead of 'make:listener'
Confusing listener creation with event creation
Typing commands in wrong order
3. Given this listener code snippet, what will be the output when the event triggers?
public function handle(UserRegistered $event) {
echo 'Welcome, ' . $event->user->name . '!';
}
medium
A. It does nothing because echo is not allowed in listeners
B. It throws an error because $event is undefined
C. It prints 'Welcome, ' followed by the user's name
D. It prints 'Welcome, User!' regardless of the actual name
Solution
Step 1: Understand the handle method
The handle method receives the event object, here UserRegistered, which contains the user data.
Step 2: Analyze the echo statement
It prints 'Welcome, ' plus the user's name from the event object, so the output is personalized.
Final Answer:
It prints 'Welcome, ' followed by the user's name -> Option C
Quick Check:
handle() prints welcome message with user name [OK]
Hint: handle() uses event data to customize output [OK]
Common Mistakes:
Assuming $event is not passed automatically
Thinking echo is disallowed in listeners
Ignoring the user property inside the event
4. Identify the error in this listener class code:
class SendNotification {
public function handle() {
// send notification code
}
}
medium
A. The handle method must accept the event object as a parameter
B. The class name must end with 'Listener'
C. The handle method should be static
D. Listeners cannot send notifications
Solution
Step 1: Check handle method signature
The handle method must accept the event object parameter to receive event data.
Step 2: Verify other options
Class name ending with 'Listener' is a convention but not required; handle should not be static; listeners can send notifications.
Final Answer:
The handle method must accept the event object as a parameter -> Option A
Quick Check:
handle(event) needs event parameter [OK]
Hint: handle() always needs event parameter [OK]
Common Mistakes:
Omitting event parameter in handle method
Thinking class name must have 'Listener' suffix
Making handle method static incorrectly
5. You want to create a listener that logs a message only when a user registers and their email ends with '@example.com'. How should you modify the listener's handle method to achieve this?
hard
A. Add an if condition inside handle to check $event->user->email ends with '@example.com' before logging
B. Create a separate listener for '@example.com' emails and register it separately
C. Modify the event to only fire for '@example.com' emails
D. Use middleware to filter events before listeners run
Solution
Step 1: Understand listener filtering
Listeners receive all events they listen to; filtering specific cases is done inside the handle method.
Step 2: Apply condition inside handle
Check if the user's email ends with '@example.com' using an if statement before running the logging code.
Step 3: Evaluate other options
Creating separate listeners or modifying events is more complex; middleware does not filter events.
Final Answer:
Add an if condition inside handle to check $event->user->email ends with '@example.com' before logging -> Option A
Quick Check:
Filter event data inside handle() with if condition [OK]
Hint: Filter event data inside handle() using if condition [OK]
Common Mistakes:
Trying to filter events outside listener handle method