Cara Membuat Validasi Input Laravel
Laravel sudah menyediakan sebuah cara untuk memvalidasi data yang dikirim melalui input form. Validasi ini tentunya dilakukan untuk memastikan bahwa data yang di input oleh pengguna sesuai dengan ketentuan. Sebelumnya saya sudah memberikan contoh sederhana crud laravel 8 dimana dalam contoh tersebut data dikirim begitu saja tanpa divalidasi sehingga kemungkinan besar data yang dimasukan oleh pengguna tidak sesuai dengan ketentuan.
Baca sebelumnya : Membuat Form Pencarian Data Pada Laravel 8
Cara Membuat validasi input laravel
Dalam contoh ini pertama saya akan menjelaskan bagaimana proses sederhana validasi input datanya, dan kemudian menampilkan hasil ketika nilai yang di input telah berhasil melalui proses validasi
- Buat 2 buah file blade baru pada folder resources/views dengan nama misal validasi.blade.php dan validasi_proses.blade.php
- Untuk validasi.blade.php isi dengan contoh kode seperti dibawah ini
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> Validasi Input Laravel </title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row justify-content-center"> <div class="col-lg-6"> <div class="card mt-5 mb-4"> <div class="card-header"> <strong>Data Pegawai - Input</strong> </div> <div class="card-body"> @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="/validasi/proses" method="post"> {{csrf_field()}} <div class="form-group"> <label>Nama Lengkap</label> <input type="text" class="form-control" name="nama" value="{{old('nama')}}" placeholder="masukan nama"> </div> <div class="form-group"> <label>Jabatan</label> <input type="text" class="form-control" name="jabatan" value="{{old('jabatan')}}" placeholder="jabatan"> </div> <div class="form-group"> <label>Umur</label> <input type="text" class="form-control" name="umur" value="{{old('umur')}}" placeholder="umur"> </div> <div class="form-group"> <label>Alamat</label> <textarea class="form-control" name="alamat">{{old('alamat')}}</textarea> </div> <input type="submit" class="btn btn-md btn-primary" name="kirimi" value="simpan"> </form> </div> </div> </div> </div> </div> </body> </html>
- Untuk validasi_proses.blade.php isi dengan kode seperti berikut
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title> Validasi Input Laravel </title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row justify-content-center"> <div class="col-lg-6"> <div class="card mt-5 mb-4"> <div class="card-header"> <strong>Data Pegawai - Hasil</strong> </div> <div class="card-body"> <table class="table table-bordered table-striped text-uppercase"> <tr> <td>Nama Lengkap</td> <td>{{$data->nama}}</td> </tr> <tr> <td>Jabatan</td> <td>{{$data->jabatan}}</td> </tr> <tr> <td>Umur</td> <td>{{$data->umur}}</td> </tr> <tr> <td>alamat</td> <td>{{$data->alamat}}</td> </tr> </table> </div> </div> </div> </div> </div> </body> </html>
- Selanjutnya atur file web.php pada folder routes dan tambahkan baris seperti berikut
Route::get('/validasi',[App\Http\Controllers\Validasi::class,'validasi']); Route::post('/validasi/proses',[App\Http\Controllers\Validasi::class,'validasi_proses']);
- Terakhir buat sebuah controller baru misal dengan nama Validasi.php seperti contoh berikut
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class Validasi extends Controller { public function validasi() { return view('/validasi'); } public function validasi_proses(Request $request) { $validate=$request->validate([ 'nama'=>'required|min:5|max:65', 'jabatan'=>'required', 'umur'=>'required|numeric', 'alamat'=>'required' ]); return view('validasi_proses',['data'=>$request]); } }
Terakhir silahkan uji atau jalankan untuk melihat hasil atau menguji validasi
Keterangan :
- old() fungsi ini digunakan untuk mendapatkan data input sebelumnya, ketika misal ad salah satu input yang mengalami error, maka inputan sebelumnya tidak akan tereset
Input Data ke Database setelah Berhasil Divalidasi
Pada contoh diatas kita hanya sebatas melakukan proses validasi, kemudian jika nilai telah melalui proses validasi maka nilai akan ditampilkan atau dikirim melalui controller atau fungsi validasi proses ke file validasi_proses.blade.php
return view('validasi_proses',['data'=>$request]);
Jika misalnya setalah data berhasil divalidasi lalu Anda ingin menginput datanya ke database/tabel, maka Anda hanya tinggal membuat perintah insert dibawah validasinya seperti contoh berikut:
public function validasi_proses(Request $request)
{
$validate=$request->validate([
'nama'=>'required|min:5|max:65',
'jabatan'=>'required',
'umur'=>'required|numeric',
'alamat'=>'required'
]);
//langsung gunakan perintah insert
DB::table('pegawai')->insert([
'nama_lengkap'=>$request->nama,
'jabatan'=>$request->jabatan,
'umur'=>$request->umur,
'alamat'=>$request->alamat
]);
return redirect('/validasi');
}
Variasi lain untuk menampilkan error pada blade
Anda juga bisa menampilkan pesan error dengan jenis variasi lain atau misalnya disini sesuai dengan gaya template bootstrap
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title> Validasi Input Laravel </title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col-lg-6">
<div class="card mt-5 mb-4">
<div class="card-header">
<strong>Data Pegawai - Input</strong>
</div>
<div class="card-body">
<form action="/validasi/proses" method="post">
{{csrf_field()}}
<div class="form-group">
<label>Nama Lengkap</label>
<input type="text" class="form-control @error('nama') is-invalid @enderror " name="nama" value="{{old('nama')}}" placeholder="masukan nama">
@error('nama')
<span class="text-danger small">{{ $message }}</span>
@enderror
</div>
<div class="form-group">
<label>Jabatan</label>
<input type="text" class="form-control @error('jabatan') is-invalid @enderror" name="jabatan" value="{{old('jabatan')}}" placeholder="jabatan">
@error('jabatan')
<span class="text-danger small">{{ $message }}</span>
@enderror
</div>
<div class="form-group">
<label>Umur</label>
<input type="text" class="form-control @error('umur') is-invalid @enderror" name="umur" value="{{old('umur')}}" placeholder="umur">
@error('umur')
<span class="text-danger small">{{ $message }}</span>
@enderror
</div>
<div class="form-group">
<label>Alamat</label>
<textarea class="form-control @error('alamat') is-invalid @enderror" name="alamat">{{old('alamat')}}</textarea>
@error('alamat')
<span class="text-danger small">{{ $message }}</span>
@enderror
</div>
<input type="submit" class="btn btn-md btn-primary" name="kirimi" value="simpan">
</form>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Kostum Pesan Error
Secara default ketika error ditampilkan, laravel sudah memiliki pesan error defaultnya sendiri, tetapi pesan error tersebut bisa Anda rubah sesuai keinginan
$messages = [
'required' => ':attribute wajib diisi',
'min' => ':attribute harus diisi minimal :min karakter ',
'max' => ':attribute harus diisi maksimal :max karakter',
'numeric'=>':attribute hanya diisi jenis angka',
];
$validate=$request->validate([
'nama'=>'required|min:5|max:65',
'jabatan'=>'required',
'umur'=>'required|numeric',
'alamat'=>'required'
],$messages);
Contoh membuat validasi input laravel diatas tentunya adalah contoh yang sederhana karena ada beberapa variasi lain yang lebih kompleks, sehingga disarankan untuk melihat dokumentasinya dari situs laravel untuk lebih lengkapnya
Baca selanjutnya : Menampilkan Pesan Sukses atau Error Setelah Berhasil Input Data di Laravel
Refrensi : https://laravel.com/docs/8.x/validation#main-content
0 Response to "Cara Membuat Validasi Input Laravel"
Post a Comment
Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin