Tutorial Laravel #16: Session dan Flash Message
1. Session di Laravel
Laravel menyediakan API session yang konsisten dan mudah dipakai, terlepas dari driver yang digunakan (file, database, Redis, dll). Konfigurasi session ada di config/session.php dan .env.
2. Menyimpan dan Mengambil Session
use IlluminateHttpRequest;
// Simpan data ke session
$request->session()->put('user_id', 1);
$request->session()->put('preferensi', ['tema' => 'dark', 'bahasa' => 'id']);
// Cara alternatif dengan helper
session(['user_id' => 1, 'nama' => 'Ariq']);
session()->put('kota', 'Semarang');
// Ambil data dari session
$userId = $request->session()->get('user_id');
$tema = session('preferensi.tema', 'light'); // dengan default value
// Cek apakah session ada
if ($request->session()->has('user_id')) {
// ada dan tidak null
}
if (session()->exists('user_id')) {
// ada (meski nilainya null)
}
// Hapus session
$request->session()->forget('user_id');
$request->session()->forget(['user_id', 'nama']); // hapus beberapa
// Hapus semua session
$request->session()->flush();
3. Flash Message
Flash message adalah session yang hanya hidup untuk satu request berikutnya saja. Sangat cocok untuk notifikasi setelah aksi seperti simpan, update, atau hapus data.
// Simpan flash message
return redirect()->route('artikel.index')
->with('success', 'Artikel berhasil disimpan!');
return redirect()->back()
->with('error', 'Terjadi kesalahan, coba lagi.');
// Bisa juga via session langsung
session()->flash('info', 'Email verifikasi telah dikirim.');
session()->flash('warning', 'Stok produk hampir habis.');
4. Menampilkan Flash Message di Blade
<!-- resources/views/partials/flash.blade.php -->
@if(session('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<i class="bi bi-check-circle"></i> {{ session('success') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
@if(session('error'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<i class="bi bi-x-circle"></i> {{ session('error') }}
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
@endif
@if(session('warning'))
<div class="alert alert-warning">{{ session('warning') }}</div>
@endif
@if(session('info'))
<div class="alert alert-info">{{ session('info') }}</div>
@endif
<!-- Sisipkan di layout utama -->
<main class="container my-4">
@include('partials.flash')
@yield('content')
</main>
5. Flash untuk Request Berikutnya
// nowFlash - tetap tersedia di request ini dan berikutnya
session()->now('success', 'Data berhasil diproses');
// Reflash - perpanjang flash session satu request lagi
session()->reflash();
// Reflash key tertentu saja
session()->keep(['success', 'error']);
6. Session di Middleware dan Auth
// Simpan URL yang mau diakses sebelum redirect ke login
public function handle(Request $request, Closure $next)
{
if (!auth()->check()) {
session()->put('intended_url', $request->url());
return redirect()->route('login');
}
return $next($request);
}
// Setelah login, redirect ke URL yang dituju
return redirect()->intended(route('dashboard'));
// intended() otomatis mengambil session intended_url
7. Ringkasan
- Gunakan
session()->put()untuk menyimpan data ke session - Gunakan
session()->get()atau helpersession('key')untuk membaca - Flash message hidup satu request - cocok untuk notifikasi sukses/error
- Buat partial view untuk flash message agar bisa dipakai di semua halaman
Tutorial berikutnya membahas upload file di Laravel.
.jpg)
