Pada eksplorasi ini, saya mencoba membuat fitur Event & Listener di Laravel untuk mengirim email saat post baru dibuat.
Event & Listener di Laravel adalah mekanisme yang memisahkan suatu aksi (Event) dengan respon yang harus dilakukan (Listener). Jadi ketika sebuah peristiwa terjadi, misalnya post baru dibuat, maka Laravel otomatis memanggil Listener yang sudah ditentukan, seperti mengirim email atau mencatat log.
1. Membuat Event
Membuat event PostPublished yang menyimpan data post baru. Event ini digunakan untuk memicu proses ketika post berhasil disimpan.
public $post;
public function __construct(Post $post) {
$this->post = $post;
}
Membuat Listener
Membuat listener SendPostPublishedNotification yang akan menangani event dengan mengirimkan email notifikasi menggunakan Mailable.
use App\Mail\PostPublishedMail;
use Illuminate\Support\Facades\Mail;
public function handle(PostPublished $event) {
Mail::to('dummy@example.com')
->send(new PostPublishedMail($event->post));
}
Membuat Mailable
Membuat PostPublishedMail yang berfungsi mendefinisikan isi email notifikasi.
public $post;
public function __construct(Post $post) {
$this->post = $post;
}
public function build() {
return $this->markdown('emails.posts.published')
->with(['post' => $this->post]);
}
Membuat View Email
Menambahkan file published.blade.php di folder resources/views/emails/posts/ untuk tampilan isi email.
@component('mail::message')
# Post Baru Diterbitkan
Judul: {{ $post->title }}
Konten:
{{ $post->content }}
Terima kasih,
{{ config('app.name') }}
@endcomponent
Menghubungkan di Controller
Setelah post berhasil dibuat melalui PostController, event PostPublished dipanggil agar Listener dijalankan.
use App\Events\PostPublished;
$post = Post::create($validatedData);
event(new PostPublished($post));
Hasil Akhir
Setiap kali post baru dibuat, sistem otomatis mengirim email notifikasi. Pada eksplorasi ini, email diarahkan ke log driver sehingga bisa dicek di file storage/logs/laravel.log.
Bisa diliat di gambar:
Dengan eksplorasi ini, saya memahami alur kerja Event → Listener → Mailable di Laravel, di mana setiap post baru dapat langsung memicu pengiriman email notifikasi secara otomatis.