Apa Itu Event dan Listener di Laravel 12: Arsitektur Event-Driven
Salah satu ciri arsitektur Laravel yang baik: ketika sesuatu terjadi di aplikasi, komponen lain bisa “mendengarkan” dan merespons, tanpa si pengirim perlu tahu siapa yang merespons.
Itulah fungsi Event dan Listener di Laravel. Artikel ini menjelaskan cara kerjanya dan bagaimana implementasinya dengan contoh nyata.
Konsep Event dan Listener
Event adalah kejadian yang terjadi di aplikasi: user mendaftar, order diproses, pembayaran berhasil. Listener adalah kode yang merespons kejadian tersebut.
Satu event bisa punya beberapa listener. Misalnya saat UserRegistered:
- Listener 1: kirim email selamat datang
- Listener 2: create profil default
- Listener 3: sync ke CRM
Controller yang trigger event tidak perlu tahu ada 3 listener di belakang. Ini yang membuat kode lebih modular.
Membuat Event dan Listener
php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail --event=UserRegistered
php artisan make:listener CreateDefaultProfile --event=UserRegistered
Kelas event (app/Events/UserRegistered.php):
<?php
namespace AppEvents;
use AppModelsUser;
use IlluminateFoundationEventsDispatchable;
use IlluminateQueueSerializesModels;
class UserRegistered
{
use Dispatchable, SerializesModels;
public function __construct(
public readonly User $user
) {}
}
Listener (app/Listeners/SendWelcomeEmail.php):
<?php
namespace AppListeners;
use AppEventsUserRegistered;
use AppMailWelcomeMail;
use IlluminateContractsQueueShouldQueue;
use IlluminateSupportFacadesMail;
class SendWelcomeEmail implements ShouldQueue
{
public function handle(UserRegistered $event): void
{
Mail::to($event->user)->send(new WelcomeMail($event->user));
}
}
Implement ShouldQueue agar listener dijalankan di background queue, tidak memperlambat proses registrasi.
Registrasi Event dan Listener
Di Laravel 12 (dan sejak Laravel 11), cukup tambahkan di app/Providers/AppServiceProvider.php:
<?php
namespace AppProviders;
use AppEventsUserRegistered;
use AppListenersSendWelcomeEmail;
use AppListenersCreateDefaultProfile;
use IlluminateSupportFacadesEvent;
use IlluminateSupportServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
Event::listen(UserRegistered::class, SendWelcomeEmail::class);
Event::listen(UserRegistered::class, CreateDefaultProfile::class);
}
}
Laravel juga mendukung auto-discovery. Kalau nama listener mengikuti konvensi, registrasi manual tidak diperlukan. Tapi registrasi manual lebih eksplisit dan lebih mudah di-trace.
Dispatch Event
// Di controller atau service
use AppEventsUserRegistered;
$user = User::create($validated);
UserRegistered::dispatch($user);
// Atau lewat helper
event(new UserRegistered($user));
Listener Synchronous vs Queued
Kalau listener implement ShouldQueue, dijalankan di background. Kalau tidak, dijalankan langsung (synchronous) sebelum response dikirim.
Kapan pakai synchronous:
- Listener yang hasilnya dibutuhkan sebelum response dikirim
- Operasi yang sangat cepat (kurang dari 10ms)
Kapan pakai queued:
- Kirim email, notifikasi, sync ke API eksternal
- Semua operasi yang tidak perlu hasilnya sekarang
Wildcard Listener
Kalau perlu listen ke banyak event sekaligus (misalnya untuk logging):
Event::listen('AppEvents*', function (string $eventName, array $data) {
Log::info("Event: {$eventName}", $data);
});
Baca Juga
- Apa Itu Observer di Laravel 12: Bedanya dengan Event Listener
- Notification di Laravel 12: Email, Database, dan Channel Kustom
Butuh tim untuk merancang arsitektur event-driven di aplikasi Laravel Anda? Lihat layanan pengembangan aplikasi kami.
Artikel Lainnya di Kategori Laravel
Laravel 9 November 2025
Routing di Laravel: Panduan Lengkap dengan Contoh Kode
Routing adalah pintu masuk semua request di Laravel. Sebelum request sampai ke controller atau logika apapun, dia harus melewati router dulu. Memahami cara kerja routing akan membuat kamu lebih mudah membangun struktur aplikasi yang rapi dan mudah di-maintain. Konsep Dasar: Bagaimana Request Diproses Saat browser mengirim request ke GET /posts, Laravel membaca file routes/web.php, mencari […]
Baca Artikel10 November 2025
Apa Itu Contract di Laravel 12? Penjelasan Simpel + Contoh Kode
Bayangkan Anda membangun fitur notifikasi. Hari ini kirim via email, bulan depan ditambah WhatsApp, tahun depan mungkin push notification. Kalau kode Anda langsung bergantung ke implementasi email spesifik, setiap perubahan akan memaksa Anda menyentuh banyak file sekaligus. Di sinilah Contract di Laravel 12 berguna. Apa Itu Contract di Laravel 12? Contract di Laravel adalah sekumpulan […]
Baca Artikel9 November 2025
Keunggulan Laravel Volt: Mengapa Single-File Component Lebih Efisien
Setelah cukup banyak pakai Livewire biasa, saya coba beralih ke Volt di salah satu proyek internal. Hasilnya memang ada perbedaan yang terasa, terutama saat nambah fitur baru atau onboarding developer junior ke proyek. Artikel ini membahas keunggulan nyata Laravel Volt dibanding cara penulisan Livewire sebelumnya, lengkap dengan contoh kode perbandingan. 1. Single-File Component: Logika dan […]
Baca ArtikelIngin Membaca Artikel Lainnya?
Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.
Lihat Semua Artikel