Validasi Form di Laravel dengan Rapi

Validasi adalah garis pertahanan pertama aplikasi Anda: ia memastikan data yang masuk sesuai harapan sebelum menyentuh database. Laravel menyediakan sistem validasi yang sangat len...

Validasi Form di Laravel dengan Rapi

Validasi adalah garis pertahanan pertama aplikasi Anda: ia memastikan data yang masuk sesuai harapan sebelum menyentuh database. Laravel menyediakan sistem validasi yang sangat lengkap, tapi banyak developer menumpuk semuanya di controller sampai berantakan. Artikel ini menunjukkan cara memvalidasi form dengan rapi di Laravel 10/11 — dari yang paling sederhana hingga rule kustom.

1. Validasi Inline dengan validate()

Cara tercepat: panggil $request->validate() langsung di controller. Jika gagal, Laravel otomatis mengembalikan pengguna ke halaman sebelumnya beserta pesan error dan input lama.

public function store(Request $request)
{
    $data = $request->validate([
        'name'  => 'required|string|max:255',
        'email' => 'required|email|unique:users,email',
        'age'   => 'nullable|integer|min:17',
    ]);

    User::create($data);

    return back()->with('success', 'Data tersimpan.');
}

Nilai kembalian validate() hanya berisi field yang lolos aturan — aman untuk langsung dipakai create().

2. Aturan Validasi yang Sering Dipakai

  • required / nullable — wajib atau boleh kosong.
  • email, numeric, integer, string, boolean — tipe data.
  • min:3 / max:255 — panjang string atau nilai angka.
  • unique:users,email / exists:categories,id — cek ke database.
  • confirmed — cocok untuk password (butuh field password_confirmation).
  • in:draft,published — nilai harus salah satu dari daftar.

3. Form Request untuk Controller yang Bersih

Saat aturan bertambah banyak, pindahkan ke kelas Form Request agar controller tetap ramping:

php artisan make:request StoreArticleRequest

Isi method authorize() dan rules():

public function authorize(): bool
{
    return true; // ganti dengan logika izin bila perlu
}

public function rules(): array
{
    return [
        'title'    => 'required|string|max:150',
        'body'     => 'required|string',
        'status'   => 'required|in:draft,published',
        'tags'     => 'array',
        'tags.*'   => 'string|max:30',
    ];
}

Lalu cukup type-hint di controller — validasi berjalan otomatis sebelum method dijalankan:

public function store(StoreArticleRequest $request)
{
    Article::create($request->validated());
    return redirect()->route('articles.index');
}

4. Pesan dan Nama Atribut Kustom

Pesan error bawaan berbahasa Inggris. Timpa dengan method messages() dan attributes() di Form Request:

public function messages(): array
{
    return [
        'title.required' => 'Judul wajib diisi.',
        'title.max'      => 'Judul maksimal 150 karakter.',
    ];
}

public function attributes(): array
{
    return [
        'title' => 'judul artikel',
    ];
}

Dengan attributes(), pesan generik seperti "The title field is required" berubah menjadi "The judul artikel field is required" — berguna untuk placeholder :attribute.

5. Aturan Validasi Kustom

Untuk logika unik, buat rule sendiri:

php artisan make:rule Uppercase
public function validate(string $attribute, mixed $value, Closure $fail): void
{
    if (strtoupper($value) !== $value) {
        $fail('The :attribute harus huruf kapital.');
    }
}

Pakai di aturan seperti rule bawaan:

'code' => ['required', new Uppercase],

Untuk validasi sekali pakai, closure juga bisa langsung ditulis inline:

'slug' => [
    'required',
    function ($attribute, $value, $fail) {
        if (str_contains($value, ' ')) {
            $fail('Slug tidak boleh mengandung spasi.');
        }
    },
],

6. Menampilkan Error di Blade

Laravel menyimpan error di variabel $errors yang selalu tersedia di setiap view. Tampilkan per field dan pertahankan input lama dengan old():

<input type="text" name="title" value="{{ old('title') }}">

@error('title')
    <span class="text-red-500">{{ $message }}</span>
@enderror

Untuk menampilkan semua error sekaligus di atas form:

@if ($errors->any())
    <ul>
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </ul>
@endif

7. Validasi Array dan File

Gunakan notasi titik * untuk memvalidasi tiap elemen array, dan aturan file untuk unggahan:

$request->validate([
    'items'        => 'required|array|min:1',
    'items.*.name' => 'required|string',
    'items.*.qty'  => 'required|integer|min:1',
    'avatar'       => 'required|image|mimes:jpg,png|max:2048',
]);

Aturan max:2048 pada file dihitung dalam kilobyte, jadi contoh di atas membatasi ukuran gambar hingga 2 MB.

Kesimpulan

Mulailah dengan validate() inline untuk form sederhana, lalu pindah ke Form Request begitu aturan bertambah. Timpa pesan agar ramah pengguna, dan buat rule kustom untuk kebutuhan khusus. Dengan pola ini validasi Anda tetap terpusat, mudah diuji, dan controller tetap bersih.

Menyusun Pesan Error yang Ramah

Validasi yang baik tidak berhenti pada aturan, tetapi juga pada cara menyampaikan kesalahan kepada pengguna. Pesan error sebaiknya jelas, spesifik, dan memandu, bukan sekadar menyatakan bahwa ada yang salah. Alih-alih menulis input tidak valid, jelaskan apa yang diharapkan, misalnya format email harus benar atau kata sandi minimal delapan karakter. Manfaatkan berkas terjemahan agar pesan konsisten dan mudah dilokalkan ke bahasa Indonesia. Tampilkan error tepat di sebelah kolom yang bermasalah agar pengguna langsung tahu bagian mana yang perlu diperbaiki. Pertahankan input yang sudah diisi ketika validasi gagal agar pengguna tidak perlu mengetik ulang. Dengan pesan yang ramah dan penempatan yang tepat, proses pengisian formulir menjadi lebih nyaman dan tingkat penyelesaiannya meningkat.

Yudhi
Ditulis oleh
Yudhi
Founder & Lead Developer, GudangCode

Yudhi adalah founder GudangCode dan developer Laravel dengan pengalaman membangun puluhan sistem informasi bisnis siap pakai — mulai dari POS, HRIS, hingga aplikasi manajemen. Ia menulis panduan dan artikel di GudangCode untuk membantu developer Indonesia menjalankan, memahami, dan men-deploy source code Laravel dengan benar.

Laravel PHP MySQL Sistem Informasi Bisnis
Lihat semua artikel Yudhi
Mau source code & aplikasi lengkapnya?

Daftar gratis untuk mengunduh aplikasi bisnis, sistem informasi, dan source code Laravel siap pakai.

Daftar Gratis & Download
Validasi Form Laravel Programming & Laravel
📚 Free Learning Hub

Learn Coding for Free at DhieCoderWeb

Explore Laravel, PHP, JavaScript tutorials, source code, web development guides, and practical programming tips.

DhieCoderWeb
100+
Tutorials
Free
Learning
SEO
Tips
Visit Dhiecoderweb.com →

Dapatkan Akses Penuh Sekarang!

Bergabunglah menjadi member kami dan dapatkan akses eksklusif ke seluruh fitur unggulan aplikasi ini. Proses cepat, mudah, dan langsung bisa Anda gunakan.

Daftar Members Sekarang
Tim Support
Online
Isi data dulu untuk mulai chat:
Beri rating & testimoni sebelum menutup:
Live chat by gudangcode.com