Setelah pengguna melakukan sebuah aksi di aplikasi kamu—seperti mengirim formulir, berhasil login, atau menghapus data—sangat penting untuk memberikan umpan balik visual bahwa aksinya telah berhasil atau gagal. Cara paling elegan untuk melakukannya di Laravel adalah dengan menggunakan session flash data.
Flash data adalah fitur session yang memungkinkan kamu menyimpan data hanya untuk satu permintaan HTTP berikutnya, setelah itu data tersebut akan secara otomatis dihapus. Ini membuatnya sempurna untuk notifikasi sekali pakai seperti pesan sukses atau error.
1. Mengapa Menggunakan Session Flash untuk Notifikasi?
Bayangkan sebuah notifikasi seperti “sticky note” yang kamu tempelkan ke permintaan pengguna saat dia pindah ke halaman lain. Begitu halaman baru dimuat, “sticky note” itu akan terbaca dan kemudian dibuang.
- Sekali Pakai: Notifikasi tidak akan muncul lagi jika pengguna me-reload halaman.
- Aman dan Terpisah: Logika notifikasi berada di controller, sedangkan tampilan notifikasinya berada di view. Ini memisahkan logika dari presentasi, yang merupakan praktik baik dalam pemrograman.
- Sangat Mudah: Laravel menyediakan helper
with()yang disederhanakan dan bisa dirangkai langsung setelahredirect().
2. Langkah-Langkah Menerapkan Notifikasi
Prosesnya sangat sederhana dan hanya melibatkan tiga langkah utama:
A. Mengirim Notifikasi dari Controller
Setelah suatu proses berhasil atau gagal, kamu bisa mengirim data flash melalui redirect().
Gunakan helper with() yang menerima dua argumen:
- Kunci (Key): Nama unik untuk data flash kamu (misalnya,
'success','error', atau'warning'). - Nilai (Value): Pesan notifikasi yang ingin kamu tampilkan.
// Contoh Notifikasi Sukses
return redirect('dashboard')->with('success', 'Data berhasil disimpan!');
// Contoh Notifikasi Error
return redirect()->back()->with('error', 'Silakan isi semua kolom yang diperlukan.');
Metode back() sangat berguna karena akan mengembalikan pengguna ke halaman sebelumnya.
B. Menampilkan Notifikasi di View
Di file Blade kamu, gunakan helper session() untuk memeriksa apakah notifikasi ada dan kemudian menampilkannya.
@if(session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
@if(session('error'))
<div class="alert alert-danger">
{{ session('error') }}
</div>
@endif
C. Contoh Praktik: Form Kontak Sederhana
Mari kita gabungkan semuanya dalam sebuah contoh nyata.
- Route (
routes/web.php)PHPuse Illuminate\Support\Facades\Route; use App\Http\Controllers\ContactController; Route::get('/kontak', [ContactController::class, 'showForm']); Route::post('/kontak', [ContactController::class, 'submitForm']); - Controller (
app/Http/Controllers/ContactController.php)PHP<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class ContactController extends Controller { public function showForm() { return view('contact'); } public function submitForm(Request $request) { // Validasi Sederhana $validated = $request->validate([ 'nama' => 'required', 'email' => 'required|email' ]); // Jika validasi gagal, Laravel akan otomatis redirect dengan error // Tapi jika sukses, kita kirimkan notifikasi sukses return redirect()->back()->with('success', 'Pesan kamu berhasil terkirim!'); } } - View (
resources/views/contact.blade.php)HTML<!DOCTYPE html> <html> <head> <title>Form Kontak</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container mt-5"> <h1>Kirim Pesan</h1> @if(session('success')) <div class="alert alert-success"> {{ session('success') }} </div> @endif @if($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="/kontak" method="POST"> @csrf <div class="mb-3"> <label for="nama" class="form-label">Nama</label> <input type="text" class="form-control" name="nama"> </div> <div class="mb-3"> <label for="email" class="form-label">Email</label> <input type="email" class="form-control" name="email"> </div> <button type="submit" class="btn btn-primary">Kirim</button> </form> </div> </body> </html>
Dalam contoh di atas, jika kamu mengisi form dengan benar, submitForm() akan dijalankan dan mengarahkan kembali ke halaman kontak dengan notifikasi sukses. Jika kamu tidak mengisi nama atau email, validasi akan gagal dan Laravel secara otomatis mengirimkan error sebagai flash data.
Kesimpulan
Menggunakan session flash untuk notifikasi adalah cara paling efisien dan bersih di Laravel. Dengan satu baris kode di controller dan beberapa baris di view, kamu bisa memberikan umpan balik yang penting kepada pengguna tanpa membebani server atau browser. Ini adalah teknik dasar yang harus dikuasai oleh setiap pengembang Laravel.
Selamat mencoba! ✨