An event represents an action that occurs in the application.
Example: Creating an Event
Run the following command to generate an event:
php artisan make:event UserRegistered
app/Events
directory.Modify the Event Class: (app/Events/UserRegistered.php
)
namespace App\Events;
use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class UserRegistered
{
use Dispatchable, SerializesModels;
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
Listeners handle the event when it is triggered.
Example: Creating a Listener
php artisan make:listener SendWelcomeEmail --event=UserRegistered
app/Listeners/
.Modify the Listener Class: (app/Listeners/SendWelcomeEmail.php
)
namespace App\Listeners;
use App\Events\UserRegistered;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;
class SendWelcomeEmail
{
public function handle(UserRegistered $event)
{
Mail::to($event->user->email)->send(new WelcomeEmail($event->user));
}
}
Register the event and listener in EventServiceProvider.php
.
Modify app/Providers/EventServiceProvider.php
:
protected $listen = [
\App\Events\UserRegistered::class => [
\App\Listeners\SendWelcomeEmail::class,
],
];
Trigger the event when a user registers.
Modify the register
method in AuthController.php
:
use App\Events\UserRegistered;
public function register(Request $request)
{
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt($request->password),
]);
event(new UserRegistered($user)); // Dispatch event
return response()->json(['message' => 'User registered successfully']);
}
Laravel Events and Listeners help separate logic and keep the application clean. This approach is useful for sending emails, logging activities, or notifying users without modifying the core logic.