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 kosong
  • nullable - boleh null/kosong
  • string, integer, boolean, array - tipe data
  • min:n, max:n - panjang string atau nilai angka min/maks
  • email - format email valid
  • unique:tabel,kolom - nilai harus unik di database
  • exists:tabel,kolom - nilai harus ada di database
  • in:a,b,c - nilai harus salah satu dari daftar
  • confirmed - harus ada field _confirmation yang 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 Request berisi 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 @error dan isi ulang dengan old()

Tutorial berikutnya membahas migration di Laravel.


ariq fadhil

Im Ariq Tech, a Top Rated Fullstack Developer with 5+ years of experience, delivering high-quality solutions across 50+ projects.