Event & Listener — Laravel

Events memisahkan "apa yang terjadi" dari "apa yang harus dilakukan" — loose coupling. Contoh: Saat user register, kita ingin: Kirim email welcome Buat record d

Events memisahkan "apa yang terjadi" dari "apa yang harus dilakukan" — loose coupling.

Contoh: Saat user register, kita ingin:

  1. Kirim email welcome
  2. Buat record di CRM
  3. Kirim notifikasi ke admin

Tanpa event (coupled):

public function register(Request $request) {
    $user = User::create($request->all());
    Mail::send(new WelcomeEmail($user));     // coupled!
    CRM::createContact($user);               // coupled!
    Notification::send($admin, new NewUser($user)); // coupled!
}

Dengan event (decoupled):

// Event class
class UserRegistered {
    public function __construct(public User $user) {}
}

// Listener classes
class SendWelcomeEmail {
    public function handle(UserRegistered $event): void {
        Mail::send(new WelcomeEmail($event->user));
    }
}

class CreateCrmContact {
    public function handle(UserRegistered $event): void {
        CRM::createContact($event->user);
    }
}

// Controller — hanya dispatch event
public function register(Request $request) {
    $user = User::create($request->all());
    event(new UserRegistered($user)); // Semua listener berjalan otomatis!
}

Keuntungan: Tambah listener baru tanpa mengubah controller. Setiap listener bisa di-queue untuk async.

Yang akan kamu pelajari