Notification di Laravel 12: Email, Database, dan Channel Kustom
Hampir semua aplikasi web butuh notifikasi: konfirmasi order, reset password, atau pemberitahuan saat ada komentar baru. Laravel punya sistem notifikasi yang cukup fleksibel: satu kelas bisa kirim ke email, database, Slack, dan channel lain sekaligus.
Artikel ini membahas cara kerja notification di Laravel 12, mulai dari membuat kelas notifikasi, kirim via email dan database, sampai membuat channel kustom.
Membuat Kelas Notifikasi
php artisan make:notification OrderConfirmed
File dibuat di app/Notifications/OrderConfirmed.php:
<?php
namespace AppNotifications;
use AppModelsOrder;
use IlluminateBusQueueable;
use IlluminateNotificationsNotification;
use IlluminateNotificationsMessagesMailMessage;
use IlluminateContractsQueueShouldQueue;
class OrderConfirmed extends Notification implements ShouldQueue
{
use Queueable;
public function __construct(
private Order $order
) {}
public function via(object $notifiable): array
{
return ['mail', 'database'];
}
public function toMail(object $notifiable): MailMessage
{
return (new MailMessage)
->subject("Order #{$this->order->id} Dikonfirmasi")
->greeting("Halo, {$notifiable->name}!")
->line("Order Anda telah kami terima dan sedang diproses.")
->action('Lihat Detail Order', route('orders.show', $this->order))
->line("Terima kasih sudah berbelanja.");
}
public function toDatabase(object $notifiable): array
{
return [
'order_id' => $this->order->id,
'message' => "Order #{$this->order->id} dikonfirmasi",
'url' => route('orders.show', $this->order),
];
}
}
Notifiable Trait
Model yang ingin menerima notifikasi harus menggunakan trait Notifiable. Model User bawaan Laravel sudah menyertakan ini:
use IlluminateNotificationsNotifiable;
class User extends Authenticatable
{
use Notifiable;
}
Untuk model lain — misalnya Admin atau Customer — tambahkan trait yang sama.
Mengirim Notifikasi
// Lewat instance model
$user->notify(new OrderConfirmed($order));
// Lewat Notification facade (tanpa model spesifik)
Notification::send($users, new OrderConfirmed($order));
// On-demand — kirim ke email tanpa model User
Notification::route('mail', 'admin@example.com')
->notify(new OrderConfirmed($order));
Karena kelas ini implement ShouldQueue, notifikasi akan diproses di background queue, tidak memperlambat response HTTP.
Notifikasi Email: Kustomisasi Template
Untuk kontrol penuh atas tampilan email, publish template bawaan Laravel:
php artisan vendor:publish --tag=laravel-mail
Template disimpan di resources/views/vendor/mail/. Edit sesuai kebutuhan brand Anda.
Kalau mau pakai Markdown template yang lebih kaya:
php artisan make:notification OrderShipped --markdown=mail.order.shipped
Template dibuat di resources/views/mail/order/shipped.blade.php:
@component('mail::message')
# Order Anda Dalam Perjalanan
Pesanan **#{{ $order->id }}** sedang dikirim ke alamat Anda.
@component('mail::button', ['url' => $trackingUrl])
Lacak Pengiriman
@endcomponent
Estimasi tiba: **{{ $order->estimated_arrival }}**
Salam,
{{ config('app.name') }}
@endcomponent
Notifikasi Database
Untuk simpan notifikasi di database (biasanya untuk fitur notifikasi in-app), buat tabel dulu:
php artisan make:notifications-table
php artisan migrate
Ambil notifikasi yang belum dibaca:
// Semua notifikasi
$notifications = auth()->user()->notifications;
// Hanya yang belum dibaca
$unread = auth()->user()->unreadNotifications;
// Tandai sudah dibaca
auth()->user()->unreadNotifications->markAsRead();
// Tandai satu notifikasi sudah dibaca
$notification->markAsRead();
Channel Kustom
Kalau perlu kirim via WhatsApp, Telegram, atau sistem internal, buat channel kustom:
<?php
namespace AppNotificationsChannels;
use IlluminateNotificationsNotification;
class WhatsAppChannel
{
public function send(object $notifiable, Notification $notification): void
{
$message = $notification->toWhatsApp($notifiable);
// Kirim via WhatsApp API
app(WhatsAppService::class)->send(
$notifiable->phone,
$message
);
}
}
Daftarkan di method via():
public function via(object $notifiable): array
{
return [WhatsAppChannel::class, 'database'];
}
public function toWhatsApp(object $notifiable): string
{
return "Order #{$this->order->id} Anda sudah dikonfirmasi.";
}
Baca Juga
Butuh tim yang bantu implementasi sistem notifikasi di aplikasi Laravel Anda? Lihat layanan pengembangan aplikasi kami.
Artikel Lainnya di Kategori Laravel
10 November 2025
Contoh Penggunaan Concurrency di Laravel 12: Dashboard, API Paralel, dan Defer
Artikel sebelumnya membahas konsep Concurrency di Laravel 12. Artikel ini fokus pada implementasi: studi kasus nyata bagaimana Concurrency bisa mempercepat aplikasi secara signifikan. Studi Kasus 1: Dashboard dengan Banyak Data Source Dashboard admin yang butuh data dari beberapa tabel berbeda. Ini biasanya jadi bottleneck karena diquery satu per satu. Sebelum (sequential — sekitar 800ms): public […]
Baca Artikel9 November 2025
Tutorial Laravel 12 Job Batching: Implementasi, Progress, dan Error Handling
Bayangkan Anda perlu kirim email ke 5.000 pengguna sekaligus, atau proses 1.000 gambar setelah upload. Kalau dijalankan satu per satu lewat queue biasa, Anda tidak tahu kapan semuanya selesai, dan tidak bisa jalankan aksi “setelah semua beres”. Job Batching di Laravel menyelesaikan masalah ini. Artikel ini membahas cara kerjanya, implementasi lengkap dengan contoh kode, dan […]
Baca Artikel
Laravel 9 November 2025
Routing di Laravel: Panduan Lengkap dengan Contoh Kode
–
Baca ArtikelIngin Membaca Artikel Lainnya?
Temukan lebih banyak insight dan tips tentang teknologi dan bisnis digital.
Lihat Semua Artikel