Membuat Notifikasi ke Email dan Halaman Website-mu dengan Laravel Notifications+Laravel Queues
Halo friends, setelah melewati kesibukanku 3 minggu terakhir ini, akhirnya aku bisa kembali menyempatkan diri untuk menulis di platform ini lagi hehe. Okay jadi kali ini yang ingin aku sharing ke kalian adalah penggunaan Laravel Notifications untuk mengirim notifikasi baik melalui email maupun sekedar ditampilkan di halaman web. Lalu aku juga bakal nerapin queues untuk mengatur pengiriman notifikasi agar semuanya berjalan secara seamless.
Bagi yang belum tahu, Laravel sudah menyediakan fitur build-in untuk membuat notifikasi dengan delivery channel berbasis mail maupun berbasis database secara mudah dan cepat. Jadi ya kalian sebenarnya tinggal menjalankan beberapa perintah untuk setup pembuatan notifikasi ini. Laravel juga sudah menyediakan build-in sistem queue sehingga proses pengiriman notifikasi akan dapat berjalan secara asinkron (pengiriman notifikasi dilakukan dengan menjalankan queue yang berjalan di background). Okay, langsung saja kita mulai setup-nya!
1. Menjalankan Command untuk Membuat Tabel Notifications dan Queues
Setup pertama yang harus kita lakukan adalah melakukan pembuatan tabel untuk menampung data notifikasi dan queue kita. Setup-nya cukup simple, kita hanya harus menjalankan command di bawah ini.
php artisan queue:table
php artisan notification:table
Setelah menjalankan command diatas, maka otomatis akan dibuatkan migration baru di dalam project-mu. Jika sudah, maka kita akan menjalankan command untuk mengeksekusi migration yang sudah dibuat ke database.
php artisan migrate
Jika sudah, maka database kita sekarang akan bertambah 2 buah tabel baru, yaitu tabel jobs
dan tabel notifications
.
2. Membuat Notifikasi Baru
Untuk membuat notifikasi baru, caranya cukup mudah, tinggal menjalankan command di bawah ini dan akan otomatis dibuatkan file notifikasi yang bisa di custom sesuai kebutuhan kalian.
php artisan make:notification ExampleNotification
Jika sudah kalian jalankan command diatas, maka project akan otomatis membuatkan folder baru yaitu Notifications, dan disana akan terdapat file notifikasi yang sudah di-generate.
Jika kalian preview isi dari file notifikasi yang dihasilkan, maka isinya akan seperti ini.
Terdapat 4 function yang berbeda, yaitu __construct
, via
, toMail
, dan toArray
. Function __construct
memiliki fungsi untuk mendefinisikan constructor di dalam class ExampleNotification
. Nantinya, paramater-parameter yang masuk ke dalam class ExampleNotification
akan di inisiasi disini. Selanjutnya ada function via
, dimana function ini memiliki fungsi untuk me-return tipe delivery channel apa yang akan digunakan untuk notifikasi yang dibuat. Karena return value-nya berupa array, maka kita bisa mendefinisikan lebih dari 1 tipe delivery channel. Lalu 2 fungsi terakhir yaitu function toMail
dan toArray
. Jika kita hanya menggunakan delivery channel dengan tipe database untuk notifikasi, maka yang akan digunakan adalah function toArray
, jika menggunakan delivery channel dengan tipe mail untuk notifikasi, maka yang akan digunakan adalah function toMail
. Untuk langkah berikutnya, kita akan memodifikasi file notifikasi yang akan kita gunakan agar sesuai dengan kebutuhan kita.
3. Kustomisasi File Notification Agar Sesuai dengan Kebutuhan dan Menyelesaikan Setup yang Lainnya
Okay, jadi langkah berikutnya adalah kustomisasi dari file notification. Hal pertama yang akan kita lakukan yaitu menambahkan implementasi ShouldQueue
agar notifikasi yang kita jalankan otomatis akan dibuatkan queue.
class ExampleNotification extends Notification implements ShouldQueue
Setelah itu, kita akan menambahkan variabel yang akan berfungsi sebagai penampung parameter yang masuk ke class ExampleNotification
.
use Queueable;
private $data;// data to be sent to the notification
Lalu selanjutnya kita akan mengubah function __construct
menjadi seperti di bawah ini.
public function __construct($data)
{
$this->data = $data;
}
Next, kita buat function via
me-return 2 tipe delivery channel yaitu mail dan database.
public function via($notifiable)
{
return ['mail', 'database'];
}
Nah, selanjutnya kita custom untuk isi notifikasi mail yang akan kita kirimkan, begini kira-kira contoh modifikasi kodenya.
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Example Notification')
->greeting('Hello!')
->line('Test isi Notifikasi:'.$this->data)
->action('Notification Action', url('/'))
->salutation('Ini adalah contoh notifikasi dengan mail');
}
Sedikit tips buat temen-temen, jika kalian ingin custom tampilan mail template bawaan dari Laravel, kalian bisa menjalankan command
php artisan vendor:publish — tag=laravel-mail
, lalu kalian bisa cek template mail bawaan Laravel sudah terpublish di folder resources/views/vendor/mail dan bisa di modifikasi sesuai keperluan kalian.
Next, kita akan custom untuk isi notifikasi yang akan tampil di web, begini kira-kira contoh modifikasi kodenya.
public function toArray($notifiable)
{
return [
'data' => $this->data
];
}
Okay, sudah semua. Tinggal kita save hasil perubahannya, lalu ada sedikit setup di .env
. Karena kita akan mengirimkan notifikasi melalui mail, maka kita perlu setup konfigurasi mail di .env
. Kalian bisa menggunakan layanan testing mail gratis seperti Mailtrap untuk melakukan simulasi pengiriman mail. Contoh modifikasinya di bawah ini.
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=*secret*
MAIL_PASSWORD=*secret*
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=*secret*
MAIL_FROM_NAME="Test App"
Kredensial untuk konfigurasi mail diatas bisa kalian dapatkan saat mendaftar di Mailtrap, lalu menuju SMTP Setting dan melihat kredensial kalian disana. Selain itu, kalian perlu setup untuk queue connection kalian di .env
menjadi seperti ini.
QUEUE_CONNECTION=database
Nah, untuk penerapan notifikasinya gimana? Gampang, kalian tinggal panggil notifikasi kalian di dalam controller. Aku akan memberikan sebuah contoh, disini aku membuat sebuah controller bernama HomeController, lalu aku buatkan sebuah fungsi dengan nama test
, nah di dalam fungsi test
inilah akan dibuat data notifikasi baru dengan memanggil notifikasi yang sudah aku buat sebelumnya dengan beberapa paramater. Berikut merupakan contohnya.
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;
use App\Notifications\ExampleNotification; //harus diisi
use Illuminate\Support\Facades\Notification; //harus diisi
use App\Models\User;class HomeController extends Controller
{
public function test (){
$user = User::all();
$data = "Ini adalah contoh data";
//dibawah ini merupakan
//contoh mengirimkan notifikasi ke semua user
Notification::send($user, new ExampleNotification($data));
return response()->json([
'message' => 'Notifikasi berhasil dikirim'
]);
}
}
Setelah itu, aku melakukan setup pada route agar bisa memanggil fungsi test
di dalam controller HomeController. Berikut merupakan penambahan route pada file web.php.
Route::get('/test', [App\Http\Controllers\HomeController::class, 'test']);
Setelah itu, jalankan command untuk me-refresh cache route dan serve project Laravel-mu.
php artisan route:cache
php artisan serve
Jika sudah, akses url http://127.0.0.1:8000/test
pada browser dan akan menampilkan tampilan seperti ini.
Jika sudah, silahkan teman-teman cek tabel jobs
di database kalian. Seharusnya sekarang sudah terdapat 2 data yang masuk antrian, yaitu data notifikasi untuk di web dan notifikasi untuk di mail.
Untuk mengeksekusi queue yang sudah masuk, kalian bisa menjalankan command di bawah ini.
php artisan queue:work
Setelah kalian menjalankan command diatas, maka tampilan terminal kalian akan menampilkan seperti ini.
Jeng-jeng, sudah selesai yeyy. Cukup mudah bukan? Sekarang kalian bisa membuat notifikasi apapun dengan cara yang sama ya, tinggal ulangi proses yang sudah dijelaskan dan sedikit modifikasi sesuai kebutuhan.
Sekian dulu yaa untuk sharing penggunaan Laravel Notification dan Queue. Semoga bermanfaat bagi temen-temen dan terimakasih sudah membaca!
Reference:
[1] https://laravel.com/docs/9.x/notifications
[2] https://laravel.com/docs/9.x/queues
[3] https://www.positronx.io/laravel-notification-example-create-notification-in-laravel/