📌 What are Events & Listeners?
Events allow you to decouple your application logic.
- Trigger an event when something happens
- Handle it later in a listener
Use Cases:
- Sending email after user registration
- Logging activity
- Broadcasting notifications
- Updating analytics
⚙️ Step 1: Create an Event
Generate an event:
php artisan make:event UserRegisteredapp/Events/UserRegistered.php:
<?php
namespace App\Events;
use App\Models\User;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
class UserRegistered
{
use Dispatchable, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}- Event carries data (
$user) to listeners
🔹 Step 2: Create a Listener
Generate listener:
php artisan make:listener SendWelcomeEmail --event=UserRegisteredapp/Listeners/SendWelcomeEmail.php:
<?php
namespace App\Listeners;
use App\Events\UserRegistered;
use Illuminate\Support\Facades\Mail;
class SendWelcomeEmail
{
public function handle(UserRegistered $event)
{
Mail::raw('Welcome to Laravel Events!', function ($message) use ($event) {
$message->to($event->user->email)
->subject('Welcome Email');
});
}
}handle()→ executes when the event is triggered
🔹 Step 3: Register Event & Listener
In app/Providers/EventServiceProvider.php:
protected $listen = [
\App\Events\UserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
],
];- Laravel automatically listens for this event
🔹 Step 4: Trigger Event
Trigger event in controller (e.g., after user registration):
use App\Events\UserRegistered;
public function register(Request $request)
{
$user = User::create($request->all());
event(new UserRegistered($user)); // Trigger event
return redirect('/dashboard');
}- Event fired immediately
- Listener executes logic asynchronously (optional with queues)
🔹 Step 5: Queue Events & Listeners (Optional)
You can queue listeners for background processing:
class SendWelcomeEmail implements ShouldQueue
{
use InteractsWithQueue, Queueable;
}- Avoids blocking HTTP request
- Works with Laravel queue system
🔹 Step 6: Broadcasting Events (Optional)
Events can be broadcasted to frontend using Laravel Echo:
class UserRegistered implements ShouldBroadcast
{
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
public function broadcastOn()
{
return new Channel('users');
}
}- Enables real-time notifications in SPA apps or chat apps
📌 Key Takeaways
This week you learned:
- What events & listeners are in Laravel
- How to create and trigger events
- How to handle logic in listeners
- Optional: queue listeners for background tasks
- Optional: broadcast events for real-time apps
👉 Next Week : Laravel Notifications & Mail System