laravel event listener | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: laravel event listener

Sunday, April 12, 2026

laravel event listener

๐Ÿ“š SERI BELAJAR LARAVEL LENGKAP Artikel 30/50

Event & Listener di Laravel:
Arsitektur yang Lebih Terpisah

Pelajari cara membuat aplikasi Laravel yang modular dan scalable dengan sistem Event & Listener — senjata rahasia developer senior untuk kode yang bersih dan mudah dikembangkan.

#Laravel #EventListener #PHP #DesignPattern #Tutorial
⏱️
ESTIMASI BACA
12 Menit
๐ŸŽฏ
LEVEL
Menengah
๐Ÿ“…
TAHUN
2025
๐Ÿ”ฅ
SERI
Laravel Lengkap

Pernah nggak kamu nulis fungsi yang ngelakuin seabrek hal sekaligus — kirim email, update database, catat log, dan notifikasi user — semua dalam satu blok kode yang panjangnya sampai bikin scroll jari keriting? Kalau iya, berarti kamu lagi mengalami masalah klasik yang disebut tight coupling, dan di sinilah sistem Event & Listener di Laravel hadir sebagai penyelamat. Di artikel ke-30 dari 50 seri Belajar Laravel Lengkap ini, kita akan kupas tuntas bagaimana arsitektur berbasis event bisa membuat kode kamu jauh lebih bersih, modular, dan mudah dikembangkan — tanpa pusing mikirin siapa yang harus ngerjain apa.

๐Ÿ“ KONSEP UTAMA

Event = "sesuatu terjadi"  |  Listener = "siapa yang bereaksi"

Sistem Event & Listener di Laravel mengimplementasikan pola Observer: satu event bisa didengarkan oleh banyak listener secara bersamaan, tanpa masing-masing komponen perlu saling mengenal satu sama lain.

๐ŸŽญ Analogi Nyata: Konser Musik & Sistem Siaran Radio

Bayangkan kamu adalah seorang DJ radio. Ketika kamu bilang "Pendengar, ini lagu terbaru dari Tulus!", kamu nggak tahu siapa yang lagi dengerin — mungkin ada yang langsung nge-share ke story, ada yang langsung download, ada yang bilang ke temennya. Kamu cukup broadcast satu pesan, dan semua orang yang "tune in" akan bereaksi sesuai caranya masing-masing.

Nah, itulah persis cara kerja Event & Listener di Laravel. Bagian kode yang "memanggil" suatu aksi (misalnya: user berhasil daftar) disebut Event. Sedangkan kode yang "bereaksi" atas kejadian itu disebut Listener. Yang indah? Bagian yang men-trigger event nggak perlu tahu sama sekali siapa yang bakalan dengerin.

INSIGHT PENTING

Event & Listener menerapkan prinsip Open/Closed Principle dari SOLID — kode terbuka untuk ekstensi (tambah listener baru) tapi tertutup untuk modifikasi. Kamu bisa tambah fitur baru tanpa menyentuh kode lama sama sekali!

Dalam konteks Laravel, misalnya kamu punya event UserRegistered. Dari satu event ini, kamu bisa punya tiga listener berbeda: satu untuk kirim email sambutan, satu untuk create profil default, dan satu untuk notifikasi ke admin — semuanya berjalan otomatis tanpa satu sama lain saling memanggil.

๐Ÿ› ️ Cara Membuat Event & Listener di Laravel

Laravel membuat pembuatan event dan listener jadi sangat mudah dengan Artisan CLI. Berikut panduan lengkap step-by-step dari nol sampai event kamu bisa berjalan:

1

Daftarkan Event & Listener di EventServiceProvider

Buka file app/Providers/EventServiceProvider.php dan daftarkan pasangan event-listener di properti $listen.

PHP
protected $listen = [
    UserRegistered::class => [
        SendWelcomeEmail::class,
        CreateUserProfile::class,
        NotifyAdminNewUser::class,
    ],
];
2

Generate Event & Listener dengan Artisan

Setelah mendaftar di EventServiceProvider, jalankan command berikut untuk generate file-nya secara otomatis:

TERMINAL
$ php artisan event:generate

# Atau generate satu per satu:
$ php artisan make:event UserRegistered
$ php artisan make:listener SendWelcomeEmail --event=UserRegistered
3

Definisikan Class Event

File event ada di app/Events/UserRegistered.php. Event hanya bertugas membawa data, bukan memproses logika:

PHP
namespace App\Events;

use App\Models\User;

class UserRegistered
{
    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}
4

Tulis Logika di Class Listener

File listener ada di app/Listeners/SendWelcomeEmail.php. Di sinilah semua logika reaksi ditulis:

PHP
namespace App\Listeners;

use App\Events\UserRegistered;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeMail;

class SendWelcomeEmail
{
    public function handle(UserRegistered $event)
    {
        Mail::to($event->user->email)
            ->send(new WelcomeMail($event->user));
    }
}
5

Dispatch (Tembak) Event dari Controller

Terakhir, panggil event dari controller atau model. Gunakan helper event() atau facade Event::dispatch():

PHP
use App\Events\UserRegistered;

public function store(Request $request)
{
    $user = User::create($request->validated());

    // Cukup dispatch event — listener akan jalan otomatis!
    event(new UserRegistered($user));

    return redirect()->route('dashboard');
}
๐Ÿ’ก
TIPS PRO

Kamu juga bisa auto-discover event tanpa mendaftar manual! Set $shouldDiscoverEvents = true di EventServiceProvider, dan Laravel akan otomatis scan semua file di folder Events & Listeners. Cocok untuk proyek yang terus berkembang.

๐Ÿ“Š Perbandingan: Kode Tanpa vs Dengan Event & Listener

Supaya kamu makin yakin kenapa Event & Listener itu penting, lihat perbandingan berikut. Ini contoh nyata bagaimana controller bisa berubah dari "monster" jadi "bersih":

❌ TANPA EVENT (Coupled)
$user = User::create($data);

// Semua logika campur aduk di sini
Mail::to($user->email)
    ->send(new WelcomeMail($user));

Profile::create([
    'user_id' => $user->id,
    'avatar' => 'default.png'
]);

Notification::send(
    $admin, 
    new NewUserNotif($user)
);

Log::info('User registered', [
    'id' => $user->id
]);

Controller gemuk, sulit ditest, semua logika terikat erat. Tambah fitur = ubah controller.

✅ DENGAN EVENT (Decoupled)
$user = User::create($data);

// Controller cuma tahu satu hal:
// "User berhasil daftar"
event(new UserRegistered($user));

// Semua listener jalan otomatis:
// ✓ SendWelcomeEmail
// ✓ CreateUserProfile  
// ✓ NotifyAdmin
// ✓ LogUserActivity

Controller ramping, mudah ditest, setiap listener independen. Tambah fitur = tambah listener baru.

๐Ÿ“‹ Tabel Perbandingan Fitur Event & Listener

Aspek Tanpa Event Dengan Event & Listener
Ukuran Controller ❌ Gemuk, banyak tanggung jawab ✅ Ramping, fokus satu tugas
Tambah Fitur Baru ❌ Harus ubah kode lama ✅ Cukup tambah listener baru
Unit Testing ❌ Sulit, banyak dependency ✅ Mudah, setiap listener independen
Async / Queue ❌ Perlu setup manual ✅ Implement ShouldQueue, beres
Scalability ❌ Makin besar makin kompleks ✅ Tiap listener berkembang mandiri
๐Ÿ”ฅ
FAKTA MENARIK

Laravel sendiri menggunakan sistem event secara internal! Misalnya Illuminate\Auth\Events\Login, Illuminate\Auth\Events\Registered, dan banyak lagi. Kamu bisa listen ke event-event bawaan Laravel ini tanpa perlu mengubah apapun di core framework.

⚡ Fitur Lanjutan: Queued Listener & Event Discovery

Sistem event di Laravel bukan sekadar notify-notify biasa. Ada dua fitur lanjutan yang bakal sering kamu pakai di proyek nyata:

๐Ÿš€ 1. Queued Listener — Proses di Background

Kalau listener kamu perlu waktu lama (kirim email, generate laporan, upload ke cloud), kamu bisa jalankan dia secara asynchronous dengan mengimplementasikan interface ShouldQueue:

PHP
use Illuminate\Contracts\Queue\ShouldQueue;

class SendWelcomeEmail implements ShouldQueue
{
    // Listener ini akan masuk ke queue, tidak blocking response
    public $queue = 'emails';   // nama queue spesifik (opsional)
    public $delay = 60;         // delay 60 detik sebelum diproses (opsional)

    public function handle(UserRegistered $event)
    {
        Mail::to($event->user->email)
            ->send(new WelcomeMail($event->user));
    }
}

๐Ÿ” 2. Event Discovery Otomatis

Capek mendaftar event satu per satu? Aktifkan auto-discovery dan Laravel akan mendeteksinya sendiri berdasarkan type-hint di method handle() pada setiap listener:

PHP — EventServiceProvider.php
// Aktifkan ini, dan hapus array $listen
public function shouldDiscoverEvents(): bool
{
    return true;
}
⚠️
PERHATIAN

Jangan lupa jalankan php artisan event:cache di production untuk performa optimal. Ini akan cache semua registrasi event sehingga Laravel tidak perlu scan file setiap request. Dan pastikan jalankan php artisan event:clear setelah kamu menambah event baru.

๐Ÿงช Testing Event & Listener di Laravel

Salah satu keuntungan terbesar sistem event adalah kemudahan testing. Laravel menyediakan fake untuk event sehingga kamu bisa verifikasi event dispatched tanpa benar-benar menjalankan listener-nya:

PHP — Test
use Illuminate\Support\Facades\Event;
use App\Events\UserRegistered;

public function test_user_registration_fires_event()
{
    // Fake event — listener tidak akan benar-benar jalan
    Event::fake();

    // Lakukan aksi register user
    $this->post('/register', [
        'name' => 'Budi Santoso',
        'email' => 'budi@example.com',
    ]);

    // Assert bahwa event benar-benar di-dispatch
    Event::assertDispatched(UserRegistered::class);
}
๐Ÿ’ก
TIPS TESTING

Gunakan Event::assertDispatched(UserRegistered::class, function($event) { ... }) untuk verifikasi data spesifik yang dibawa event — misalnya memastikan bahwa user yang di-pass ke event memang user yang benar. Ini jauh lebih reliable daripada sekadar cek apakah event terjadi.

✅ KESIMPULAN

Event & Listener: Kunci Kode Laravel yang Bersih & Scalable

Di artikel ke-30 dari seri 50 Artikel Belajar Laravel ini, kita sudah belajar bahwa sistem Event & Listener di Laravel bukan sekadar fitur tambahan — melainkan fondasi dari arsitektur aplikasi yang sehat. Berikut poin-poin utamanya:

  • Event adalah sinyal "sesuatu terjadi", dan Listener adalah komponen yang bereaksi atasnya
  • Sistem ini menerapkan prinsip Separation of Concerns — setiap komponen punya satu tanggung jawab
  • Controller jadi ramping karena tidak perlu tahu detail apa yang harus dilakukan setelah suatu aksi
  • Dengan ShouldQueue, listener bisa berjalan asynchronous tanpa blocking response
  • Testing jadi mudah berkat Event::fake() yang disediakan Laravel

Sekarang tantangannya: coba implementasikan sistem event di proyek Laravel kamu! Pilih satu alur yang punya banyak efek samping (registrasi, pembayaran, atau komentar baru), refactor menggunakan Event & Listener, dan rasakan sendiri betapa kode kamu jadi jauh lebih mudah dibaca.

TOPIK TERKAIT:

#Laravel #EventListener #PHP #ObserverPattern #SolidPrinciples #WebDevelopment #BelajarLaravel

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux