Pernah nggak kamu asal submit form dan ternyata semua field kosong bisa masuk ke database? Atau ada user yang iseng masukin email palsu, angka negatif, atau bahkan skrip berbahaya di kolom nama? Itulah kenapa validasi form di Laravel bukan sekadar fitur tambahan — ini adalah garis pertahanan pertama aplikasimu. Dalam seri 50 Artikel Belajar Laravel ini, kita sudah bahas cara buat form di Blade (Artikel 17), dan sekarang saatnya kita pastikan data yang masuk itu bersih, valid, dan aman.
Tenang, Laravel sudah nyediain sistem validasi yang powerful banget — dan surprisingly, mudah dipelajari. Yuk kita mulai!
Validasi Form adalah proses memastikan bahwa data yang dikirimkan pengguna melalui form sesuai dengan aturan yang telah ditentukan — sebelum data tersebut diproses atau disimpan ke database.
🛡️ Kenapa Validasi Form di Laravel Itu Wajib?
Bayangkan kamu punya toko dan ada pelanggan yang mau checkout. Kamu pasti nggak langsung terima pembayaran tanpa ngecek: apakah barang dipilih? Apakah alamat pengiriman diisi? Apakah nomor kartu kredit valid? Nah, validasi form itu persis kayak kasir yang teliti — dia ngecek semua detail sebelum transaksi diproses.
Di dunia web, tanpa validasi, aplikasimu bisa jadi sarang bug, data kotor, bahkan celah keamanan. Laravel menyediakan mekanisme validasi yang terintegrasi langsung di controller maupun via Form Request — dan kita akan bahas keduanya.
Menurut OWASP (Open Web Application Security Project), input yang tidak divalidasi masuk dalam daftar 10 kerentanan web paling berbahaya di dunia. Validasi bukan opsional — itu wajib!
| Aspek | ❌ Tanpa Validasi | ✅ Dengan Validasi |
|---|---|---|
| Keamanan | Rentan SQL Injection & XSS | Data bersih & aman |
| Integritas Data | Data bisa kosong/tidak konsisten | Data selalu sesuai format |
| UX Pengguna | Tidak ada feedback jelas | Pesan error yang informatif |
| Debugging | Bug sulit dilacak | Error tertangkap sejak awal |
⚙️ Cara Validasi Form di Laravel: Step by Step
Laravel punya dua cara utama untuk validasi: langsung di Controller menggunakan method $request->validate(), atau menggunakan Form Request (kita bahas detail di Artikel 19). Untuk sekarang, kita fokus ke cara pertama dulu yang paling cepat dipraktikkan.
Buat Route & Controller
Pastikan kamu sudah punya route untuk menampilkan form (GET) dan menerima data (POST). Kita pakai contoh form pendaftaran mahasiswa.
use App\Http\Controllers\MahasiswaController; Route::get('/daftar', [MahasiswaController::class, 'create']); Route::post('/daftar', [MahasiswaController::class, 'store']);
Tambahkan Validasi di Controller
Di method store(), tambahkan $request->validate() sebelum proses penyimpanan. Jika validasi gagal, Laravel otomatis redirect ke halaman sebelumnya dengan pesan error.
public function store(Request $request) { // 🛡️ Validasi data masuk $validated = $request->validate([ 'nama' => 'required|string|max:100', 'email' => 'required|email|unique:mahasiswas,email', 'nim' => 'required|digits:10|unique:mahasiswas,nim', 'angkatan' => 'required|integer|min:2000|max:2025', 'jurusan' => 'required|in:TI,SI,MI,RPL', ]); // ✅ Jika lolos validasi, simpan ke database Mahasiswa::create($validated); return redirect('/daftar') ->with('sukses', 'Data mahasiswa berhasil disimpan!'); }
Tampilkan Pesan Error di Blade
Laravel secara otomatis mengirim variable $errors ke view. Tampilkan di Blade seperti ini:
<!-- Tampilkan semua error --> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <!-- Atau tampilkan per field --> <input type="text" name="nama" value="{{ old('nama') }}"> @error('nama') <span class="text-danger">{{ $message }}</span> @enderror
Selalu gunakan old('nama_field') di value input. Ini memastikan data yang sudah diketik tidak hilang saat validasi gagal — sangat penting untuk UX yang baik!
📋 Daftar Aturan Validasi Paling Sering Dipakai
Salah satu kekuatan terbesar validasi form di Laravel adalah koleksi aturannya yang super lengkap. Kamu bisa kombinasikan beberapa aturan sekaligus dengan tanda |. Berikut aturan-aturan yang paling sering kamu butuhkan:
| Aturan | Fungsi | Contoh |
|---|---|---|
required | Field wajib diisi | 'nama' => 'required' |
email | Format email valid | 'email' => 'email' |
min:n / max:n | Panjang/nilai minimum atau maksimum | 'umur' => 'min:17|max:99' |
unique:table,col | Nilai harus unik di tabel tertentu | 'email' => 'unique:users' |
confirmed | Harus sama dengan field _confirmation | 'password' => 'confirmed' |
in:val1,val2 | Nilai harus salah satu dari daftar | 'status' => 'in:aktif,nonaktif' |
numeric / integer | Harus berupa angka | 'nilai' => 'numeric' |
nullable | Boleh null/kosong | 'bio' => 'nullable|string' |
Aturan validasi bisa ditulis sebagai string (dipisah |) atau sebagai array. Untuk aturan yang lebih kompleks atau mengandung koma (seperti Rule::in([...])), selalu gunakan array untuk menghindari konflik parsing.
🌐 Kustomisasi Pesan Error Validasi Laravel
Secara default, pesan error Laravel berbahasa Inggris. Untungnya, kamu bisa dengan mudah menggantinya — bahkan per field. Ini bikin pesan error jauh lebih user-friendly dan relevan konteksnya.
$request->validate([ 'email' => 'required|email|unique:users', 'nim' => 'required|digits:10', ], [ // Format: 'field.rule' => 'pesan kustom' 'email.required' => 'Email wajib diisi, ya!', 'email.email' => 'Format email tidak valid.', 'email.unique' => 'Email ini sudah terdaftar.', 'nim.required' => 'NIM harus diisi.', 'nim.digits' => 'NIM harus tepat 10 digit angka.', ]);
Jangan pernah mengandalkan validasi hanya di sisi klien (JavaScript). Ini bisa di-bypass dengan mudah. Validasi server-side di Laravel adalah keharusan, bukan pelengkap. Gunakan keduanya untuk pengalaman terbaik.
Gunakan Bahasa Indonesia untuk Semua Pesan
Daripada atur per field, kamu bisa ganti seluruh file bahasa validasi Laravel. Install laravel-lang lalu jalankan:
# Install package bahasa composer require laravel-lang/lang --dev php artisan lang:add id # Set locale di config/app.php 'locale' => 'id',
Test Validasimu!
Selalu coba submit form dengan data yang sengaja salah — field kosong, email tanpa @, angka di luar range — untuk memastikan setiap aturan bekerja sesuai harapan. Debugging validasi jauh lebih mudah jika dilakukan sejak awal.
Untuk proyek skala besar, pertimbangkan memindahkan logika validasi ke Form Request (kelas terpisah). Ini membuat controller lebih bersih dan validasi lebih mudah diuji secara independen. Kita akan bahas ini detail di Artikel 19!
Validasi Form di Laravel: Simpel, Kuat, dan Wajib Dikuasai
Di artikel ini kita sudah belajar:
- Kenapa validasi form di Laravel itu esensial untuk keamanan dan integritas data
- Cara menggunakan
$request->validate()langsung di Controller - Daftar aturan validasi paling umum dan cara mengombinasikannya
- Cara menampilkan pesan error di Blade dengan
@errordanold() - Cara mengkustomisasi pesan error agar lebih ramah pengguna
Ini adalah bagian dari Seri 50 Artikel Belajar Laravel yang dirancang untuk membawa kamu dari nol sampai bisa membangun aplikasi web profesional. Artikel selanjutnya kita akan naik level dengan Form Request — cara validasi yang lebih rapi dan terstruktur.
No comments:
Post a Comment