Implementasi Form Request Validation Di Laravel 8

ID • 4 years ago • 4 min read • 4866 views
Implementasi Form Request Validation Di Laravel 8

Implementasi Form Request Validation Di Laravel 8

id4 min read • 4866 views

Laravel Form Request Validation - Hi, semuanya 👋 pada artikel ini, saya akan sharing tentang cara implementasi atau menggunakan form request validation di laravel 8. Tapi sebelumnya, apa sih form request validation itu ? hmm 🤔

Jadi, form request validation itu bisa dibuat untuk melakukan validasi data dengan skenario validasi yang kompleks. Apa maksudnya ? mungkin saat ini ketika kamu membuat suatu validasi, kamu akan melakukannya disetiap method seperti store dan update dengan kode seperti di bawah ini.

public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);

    // The blog post is valid...
}

Jika validasi tidak terlalu kompleks, mungkin tidak terlalu bermasalah, tapi jika validasi yang kamu terapkan sudah terbilang kompleks atau banyak yang harus di validasi, maka kamu juga akan menuliskan validasi tersebut di method yang lainnnya juga. Hal seperti ini tentu akan membuat code di controller kamu akan terlihat menumpuk. Hal seperti ini bisa diatasi dengan menerapkan form request validation di laravel.

php artisan make:request PostRequest

Untuk membuat form request class, kamu bisa menggunakan perintah CLI artisan make:request seperti contoh di atas. Dengan perintah tersebut, form request class akan digenerate dan akan ditempatkan pada direktori app/Http/Requests. Jika direktori tersebut belum ada, maka saat kamu menjalankan perintah make:request, secara otomatis direktori tersebut juga akan dibuat oleh laravel.

Agar lebih mudah dipahami, mari kita langsung saja ke case study di bawah ini 👇.

Disini, saya akan memberikan contoh dengan membuat form request validation untuk menerapkan validasi store dan update post.

php artisan make:request PostRequest

Jalankan perintah artisan seperti di atas untuk membuat class PostRequest yang nantinya kita juga akan membuat validasi di dalamnya.

Setiap dari class request ini, juga akan terdapat dua method yang disertakan yaitu authorize dan rules. Jika request dapat dilakukan oleh user yang tidak ter-authentikasi, pada method authorize ini bisa kamu define dengan nilai false, tapi sebaliknya jika request hanya bisa dilakukan oleh user yang telah diauthentikasi, maka method authorize bisa dikasih nilai true.

public function rules()
{
    return [
        'title' => 'required|max:255',
        'body' => 'required',
    ];
}

Kemudian pada method rules, silahkan atur request apa saja yang perlu divalidasi. Disini saya contohkan, saya akan mem-validasi setiap ada request untuk title dan body.

<?php

namespace App\Http\Controllers;

use App\Http\Requests\PostRequest;

class PostController extends Controller
{
    public function store(PostRequest $request)
    {
    
    }

    public function update(PostRequest $request)
    {
    
    }
}

Jika class request sudah di setup, maka selanjutnya kita tinggal memanggilnya di method store dan update pada controller seperti contoh di atas.

Bagaimana cara membuat validasi unique pada class form request validation ?

'title' => 'required|max:255|unique:posts,title',

Untuk menambahkan rule unique, kamu bisa menambahkan kode seperti di atas. Disini saya contohkan untuk menerapkan rule unique pada data title. Dengan validation tersebut, jika kamu coba menambahkan data dengan title yang sama dengan title yang sudah ada pada table posts, maka kamu tidak akan bisa melanjutkan proses atau akan me-return ke halaman sebelumnya.

Tapi, apa yang terjadi saat kamu coba mengedit salah satu data post dan tanpa mengubah data lalu submit ? ketika kamu submit form, maka proses tidak akan bisa dilanjutkan dan akan di-return kembali ke halaman sebelumnya. Kenapa ? karena saat kamu melakukan update data, validasi akan dijalankan dengan rule required dan memastikan bahwa pada table posts tidak ada data title yang sama dengan request yang kamu lakukan.

Bagaimana cara mengatasi masalah ini ?

Kita bisa menerapkan except atau pengecualian pada rules di class request tersebut menggunakan kode seperti di bawah ini

public function rules()
{
    return [
        'title' => "required|max:255|unique:posts,title,". optional($this->post)->id,
    ];
}

atau bisa juga menggunakan cara seperti di bawah ini.

use Illuminate\Validation\Rule;

public function rules()
{
    return [
	    'title' => [
		    'required','max:255',
		    Rule::unique('posts', 'title')->ignore($this->post->id)
	    ]
    ]; 
}

Dengan cara dan kode seperti di atas, saat kita edit data post tanpa mengubah data title lalu submit, maka sudah bisa dilanjutkan dan berhasil, karena kita sudah menerapkan pengecualian unique validation pada data post yang sedang diedit.

Demikianlah artikel tentang penggunakan form request validation di laravel 8 kali ini, semoga dapat bermanfaat, selamat mencoba dan sampai jumpa pada artikel berikutnya. 👋

 

Happy Coding 🥂 👩‍💻

Published on February 06, 2022
Last updated on June 03, 2026

If you like this post and want to support us, you can support us via buymeacoffee or trakteer.