Tutorial Laravel #9: Request, Input, dan Validasi Dasar
1. Apa itu Request di Laravel?
Di Laravel, semua data yang masuk (form, URL parameter, header, file) dikemas dalam object IlluminateHttpRequest. Object ini jauh lebih powerful dari $_POST dan $_GET di PHP native.
2. Mengakses Input
use IlluminateHttpRequest;
public function store(Request $request)
{
// Ambil semua input
$all = $request->all();
// Ambil input spesifik
$judul = $request->input('judul');
$judul = $request->judul; // cara singkat
// Dengan nilai default
$status = $request->input('status', 'draft');
// Ambil dari query string (?page=2)
$page = $request->query('page', 1);
// Ambil hanya field tertentu
$data = $request->only(['judul', 'konten', 'status']);
// Ambil semua kecuali field tertentu
$data = $request->except(['_token']);
// Cek keberadaan input
if ($request->has('gambar')) { /* ada file */ }
if ($request->filled('judul')) { /* ada dan tidak kosong */ }
if ($request->missing('email')) { /* tidak ada */ }
}
3. Informasi Request Lainnya
$request->method(); // GET, POST, PUT, DELETE
$request->isMethod('post'); // true/false
$request->url(); // http://localhost/artikel
$request->fullUrl(); // http://localhost/artikel?page=2
$request->path(); // artikel
$request->ip(); // IP user
$request->userAgent(); // browser info
$request->isAjax(); // apakah request Ajax
4. Validasi Dasar dengan validate()
Cara paling mudah untuk validasi di Laravel - langsung di controller:
public function store(Request $request)
{
// Jika validasi gagal, otomatis redirect back dengan error
$validated = $request->validate([
'judul' => 'required|string|max:200',
'konten' => 'required|string|min:50',
'kategori' => 'required|integer|exists:kategoris,id',
'gambar' => 'nullable|image|mimes:jpg,png,webp|max:2048',
'status' => 'required|in:draft,published',
]);
// Kalau sampai sini, data sudah valid
Artikel::create($validated);
return redirect()->route('artikel.index')
->with('success', 'Artikel berhasil disimpan!');
}
5. Aturan Validasi yang Sering Dipakai
required- wajib ada dan tidak kosongnullable- boleh null/kosongstring,integer,boolean,array- tipe datamin:n,max:n- panjang string atau nilai angka min/maksemail- format email validunique:tabel,kolom- nilai harus unik di databaseexists:tabel,kolom- nilai harus ada di databasein:a,b,c- nilai harus salah satu dari daftarconfirmed- harus ada field_confirmationyang sama (untuk password)image,mimes:jpg,png- validasi file
6. Pesan Error Kustom
$request->validate(
[
'judul' => 'required|max:200',
'email' => 'required|email|unique:users',
],
[
'judul.required' => 'Judul artikel tidak boleh kosong.',
'judul.max' => 'Judul maksimal 200 karakter.',
'email.required' => 'Email wajib diisi.',
'email.email' => 'Format email tidak valid.',
'email.unique' => 'Email sudah terdaftar.',
]
);
7. Tampilkan Error di Blade
<form method="POST" action="{{ route('artikel.store') }}">
@csrf
<div class="mb-3">
<label>Judul</label>
<input type="text" name="judul"
value="{{ old('judul') }}"
class="form-control @error('judul') is-invalid @enderror">
@error('judul')
<div class="invalid-feedback">{{ $message }}</div>
@enderror
</div>
<button type="submit">Simpan</button>
</form>
old('judul') digunakan untuk mengisi ulang nilai input jika validasi gagal - user tidak perlu ketik ulang.
8. Ringkasan
- Object
Requestberisi semua data input dari user - Gunakan
$request->validate()untuk validasi langsung di controller - Jika validasi gagal, Laravel otomatis redirect back dengan error dan old input
- Tampilkan error di Blade dengan
@errordan isi ulang denganold()
Tutorial berikutnya membahas migration di Laravel.
.jpg)
