Pluginify

Masuk Daftar
Home > Blog > Laravel > Memahami Event Listener Laravel untuk Arsitektur Aplikasi yang Terstruktur

Memahami Event Listener Laravel untuk Arsitektur Aplikasi yang Terstruktur

Memahami Event Listener Laravel untuk Arsitektur Aplikasi yang Terstruktur

Pada aplikasi berskala menengah hingga besar, kebutuhan untuk memisahkan logika tertentu menjadi bagian terpisah sangatlah penting. Laravel menyediakan mekanisme Event dan Listener yang memungkinkan pengembang merespon suatu kejadian (event) tanpa harus mencampur adukkan logika dalam satu bagian kode.

Pendekatan berbasis Event Listener membantu menjaga struktur aplikasi lebih bersih, modular, dan mudah dikembangkan. Model ini lazim digunakan untuk kebutuhan seperti pengiriman email, logging, broadcasting, hingga proses asynchronous melalui job queue.

Konsep Dasar Event dan Listener

Secara umum, terdapat dua entitas utama:

  1. Event — merupakan kejadian atau aksi yang terjadi, misalnya UserRegistered.
  2. Listener — merupakan handler yang akan dijalankan ketika event tersebut terjadi, misalnya SendWelcomeEmail.

Event tidak harus tahu siapa atau apa yang mendengarkannya, sehingga sistem menjadi loosely-coupled.

Manfaat Event Listener dalam Aplikasi Laravel

Menggunakan Event Listener memberikan beberapa manfaat penting:

  • Pemecahan logika (decoupling): Menghindari logika yang menumpuk dalam Controller.
  • Modularitas: Logika event dapat dipecah menjadi banyak Listener.
  • Perawatan mudah: Perubahan kecil tidak mengganggu komponen lain.
  • Mendukung Queue: Listener dapat dijalankan melalui antrian (job queue).
  • Skalabilitas: Cocok untuk aplikasi yang terus berkembang.
  • Reuse Event: Event yang sama dapat dipakai oleh banyak Listener berbeda.

Pendekatan ini sangat bermanfaat dalam sistem besar seperti e-commerce, SaaS, atau sistem yang memiliki log perubahan.

Struktur Event dan Listener

Laravel menyediakan dua perintah artisan untuk membuat event dan listener:

php artisan make:event UserRegistered
php artisan make:listener SendWelcomeEmail --event=UserRegistered

Perintah di atas akan menghasilkan file di direktori:

  • app/Events
  • app/Listeners

Secara default, Laravel juga memiliki file registrasi event-listener di:

app/Providers/EventServiceProvider.php

File tersebut berfungsi untuk memetakan event terhadap listener.

Contoh Implementasi Event

Berikut contoh event sederhana UserRegistered:

namespace AppEvents;

use AppModelsUser;
use IlluminateFoundationEventsDispatchable;

class UserRegistered
{
    use Dispatchable;

    public $user;

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

Event membawa data User, sehingga Listener dapat memprosesnya.

Contoh Implementasi Listener

Contoh listener SendWelcomeEmail:

namespace AppListeners;

use AppEventsUserRegistered;
use IlluminateContractsQueueShouldQueue;

class SendWelcomeEmail implements ShouldQueue
{
    public function handle(UserRegistered $event)
    {
        // Mengirim email selamat datang
        Mail::to($event->user->email)->send(new AppMailWelcomeMail($event->user));
    }
}

Listener di atas mengimplementasi ShouldQueue, artinya handler ini akan masuk ke job queue dan berjalan asinkron.

Mendaftarkan Event dan Listener

Untuk menghubungkan event dan listener, buka file:

app/Providers/EventServiceProvider.php

Tambahkan mapping:

protected $listen = [
    AppEventsUserRegistered::class => [
        AppListenersSendWelcomeEmail::class,
    ],
];

Dengan demikian, Laravel mengetahui listener mana yang harus dijalankan jika event terjadi.

Memicu Event (Dispatch Event)

Event biasanya dipicu setelah suatu proses bisnis terjadi, misalnya saat user selesai registrasi.

Contoh dispatch di Controller:

use AppEventsUserRegistered;

public function register(Request $request)
{
    $user = User::create($request->all());
    UserRegistered::dispatch($user);

    return response()->json([
        'message' => 'Registrasi berhasil!'
    ], 201);
}

Ketika event dipanggil, Laravel akan menjalankan semua listener yang terdaftar.

Menjalankan Listener Menggunakan Queue

Karena Listener dapat memuat proses berat (misal email atau logging), Laravel menyediakan integrasi dengan queue.

Untuk menjalankan listener dalam antrian:

  1. Tambahkan interface di listener:
implements ShouldQueue
  1. Jalankan worker:
php artisan queue:work

Dengan mode ini, aplikasi tidak akan lambat karena proses berat dilakukan secara asynchronous.

Event Tanpa Listener

Laravel juga memungkinkan membuat event tanpa listener, misalnya untuk broadcasting atau logging internal.

Contoh:

UserLoggedIn::dispatch($user);

Meskipun tidak memiliki listener, approach ini tetap berguna untuk tracking state sistem.

Event Otomatis dari Model (Model Event)

Laravel memiliki event bawaan pada Eloquent Model, seperti:

  • created
  • updated
  • deleted
  • restored

Contoh penggunaan:

User::created(function($user) {
    Log::info('User baru dibuat: '.$user->email);
});

Model event ini dapat membantu developer tanpa perlu membuat event manual.

Kesimpulan

Event Listener Laravel merupakan fondasi penting dalam membangun aplikasi yang terstruktur dan scalable. Dengan pendekatan ini, developer dapat memecah logika menjadi bagian-bagian modular sehingga mudah dipelihara dan mendukung eksekusi asynchronous melalui queue.

Dengan memanfaatkan Event Listener, aplikasi menjadi lebih bersih, terorganisir, mudah di-maintain, serta mampu menangani proses kompleks secara efisien.

Baca Juga: Menerapkan Job Queue Laravel untuk Performa Aplikasi yang Optimal

Pluginify
Pluginify