Membuat Validasi pada Laravel

Pada dasarnya semua data yang akan dieksekusi pasti harus memenuhi validasi yang sudah ditentukan. Bagaimana jika data tidak dilakukan validasi? pasti akan terjadi kesalahan pada saat menyimpan atau mengeluarkan suatu data dari basis data. Seharusnya validasi harus dilakukan sebaik mungkin, kalau tidak akan terjadi kebocoran data yang tidak diinginkan. Pada tutorial ini Anda akan membahas validasi saat menginput data pada form.

Daftar isi:

Menambahkan rute baru

Hal pertama kali ialah menenambahkan routing seperti dibawah ini pada berkas web.php pada direktori routes. Maka akan menambahkan routing users/create (GET) dan users (POST), meskipun menggunakan resource tetapi karena menambahkan fungsi only() maka hanya dua routing itulah yang akan digunakan.

use App\Http\Controllers\UserController;

Route::resource('users', UserController::class)->only([
    'create', 'store'
]);

Membuat controller baru

Saatnya membuat controller baru dengan menjalankan lewat terminal dengan php artisan make:controller UserController yang akan membuat berkas pada app\Http\Controllers\UserController.php. Kemudian silakan masukan fungsi create() dan store() seperti dibawah ini:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class UserController extends Controller
{
    public function create()
    {
        return view('users.create');
    }

    public function store(Request $request)
    {
        // nanti isi disini skrip validasinya
    }
}

Membuat berkas dan skripnya

Silakan buat berkas pada resources\views\users\create.blade.php dan kemudian masukan skrip dibawah ini:

<!DOCTYPE html>
<html>
<head>
    <title>Simpel form users</title>
</head>
<body>
    <form action="{{ route('users.store') }}" method="post">
        @csrf
        <p>
            <label>Nama</label>
            <input type="text" name="nama">
        </p>
        <p>
            <label>Username</label>
            <input type="text" name="username">
        </p>
        <p>
            <button type="submit">Simpan</button>
        </p>
    </form>
</body>
</html>

Membangun validasi

Sekarang waktunya membuat validasi yang sederhana seperti skrip dibawah ini, jadi input pada form harus di isi wajib karena menggunakan validasi required. Hal itu sama saja jika Anda membuat input yang menggunakan atribut required (<input required />).

public function store(Request $request)
{
    $request->validate([
        'nama' => 'required',
        'nama_pengguna' => 'required',
    ]);
}

Menampilkan pesan validasi

Jadi!, setelah menambahkan skrip validasi di controller seperti cara diatas pastinya belum membuahkan hasil. Sebab pesan validasi tidak tampil, maka dari itu silakan untuk menambahkan skrip dibawah ini di bagian bawah tag input baik nama maupun nama_pengguna. Silakan dibawah hasilnya maka akan menampilkan pesan validasi yang harus terpenuhi.

@error('nama')
    <p><small>{{ $message }}</small></p>
@enderror

...

@error('nama_pengguna')
    <p><small>{{ $message }}</small></p>
@enderror

Catatan: Jika Anda ingin mengubah bahasa pesan validasi silakan cek tutorial pada kelas ini dengan judul Konfigurasi Dasar Laravel.

Bonus

Menambahkan minimal dan maksimal karakter

Anda bisa menambahkan nilai minimal dan maksimal sesuai yang Anda sukai, jadi intinya suatu pengguna saat memasukan data pada form bisa diminimalkan berapa minimal dan maksimal karakter yang wajib diisi.

$request->validate([
    'nama' => 'required|min:3|max:191',
    'nama_pengguna' => 'required|min:3|max:191',
]);

Catatan: Jika Anda menggunakan metode untai (string) maka harus dipisahkan dengan garis vertikal (|).

Agar nama pengguna tidak duplikat

Agar nama pengguna atau username tidak duplikat jika nanti sudah menerapkan di tabel basis data bisa menggunakan unique yang diteruskan ke nama tabel yaitu users.

$request->validate([
    ...
    'nama_pengguna' => 'required|unique:users'
]);

Penerapan validasi untuk unique bisa digunakan dengan syarat setiap nilai pada suatu kolom (field) di tabel hanya bisa dimiliki satu data saja. Jadi contohnya seperti alamat email, nomor hp, slug pada pos, dan lainnya.

Catatan: Contoh diatas bisa dilakukan saat ingin menambahkan data saja, terus bagaimana cara melakukannya jika melakukan pembaruan data? Tentu cara tersebut bisa menggunakan unique:users,id,123. id (primary key) dan 123 (id-Nya).

Cara lain menulis validasi

Sekader cara menulis validasi bisa dilakukan dengan contoh ini, akan tetapi untuk menulis dengan cara ini mungkin kelihatan asing. Tetapi tidak ada salahnya untuk dibawah.

public function store()
{
    request()->validate([
        'nama' => ['required', 'min:3', 'max:191'],
        'nama_pengguna' => ['required', 'min:3', 'max:191', 'alpha_dash']
    ]);
}

Selengkapnya bisa baca dokumentasi Laravel Validasi