Pendahuluan
Validasi menjadi sebuah kewajiban dalam sebuah aplikasi yang sangat penting untuk diperhatikan, saya menganut ideologi "don't trust user input". Karena benar adanya, user yang akan menggunakan aplikasi yang sedang kita buat sangat beragam dan dari latar belakang serta tujuan yang berbeda-beda, maka dengan validasi kita dapat menyamakan persepsi apa yang hendak dilakukan user dalam aplikasi yang sedang digunakannya.
Baca Juga: Membuat Laporan Laravel Excel 3.0
Make Rule Validation
Sejak kemunculan Laravel 5.5, command untuk membuat rule menggunakan artisan telah disediakan. Sehingga kita tidak perlu repot lagi membuatnya secara manual. Sebagaimana tujuan yang akan kita capai, saya asumsikan teman-teman sudah meng-install Laravel 5.5 keatas, gunakan command berikut untuk membuat rule:
php artisan make:rule Birth
Sebelum melanjutkan, custom validation yang kita buat adalah untuk melakukan filter tanggal lahir, dimana data yang diterima harus menggunakan format tanggal Y-m-d dan tahun lahirnya harus kurang 10 tahun dari tahun sekarang. Misal: kita hanya mengizinkan user yang berumur 11 Tahun untuk menginput data.
File yang dihasilkan dari command diatas akan ditempatkan ke dalam folder app/Rules
, buka file Birth.php
kemudian pada method passes digunakan untuk membuat rule yang diharapkan:
public function passes($attribute, $value)
{
$year = Carbon::now()->format('Y') - 10;
$getYear = explode('-', $value);
return Carbon::createFromFormat('Y-m-d', $value) && $getYear[0] < $year;
}
Penjelasan: Line-3 mengambil data tahun sekarang yang kemudian dikurangkan 10, jadi jika tahun sekarang 2018 - 10 = 2008. Line-4 melakukan explode data yang diterima dari form input, format tanggal yang di-input adalah yyyy-mm-dd, misal: 1994-04-19. Maka jika di-explode menghasilkan 3 array: [0] = 1994, [1] = 04, [2] = 19. Line-5 mengecek format tanggal menggunakan Carbon, jika format data yang diterima dari input-an user sudah menggunakan format Y-m-d, maka nilainya true. Kondisi kedua, jika $getYear[0] (baca: Tahun, dalam hal ini 1994 jika menggunakan contoh diatas) itu kurang dari nilai variable year (baca: dalam hal ini 2008, jika menggunakan contoh diatas), maka nilainya adalah true.
Pada method message() digunakan untuk membuat pesan yang akan ditampilkan jika return yang dihasilkan pada method sebelumnya tidak terpenuhi atau bernilai false.
public function message()
{
return ':attribute harus dengan format Y-m-d';
}
Baca Juga: Membuat Aplikasi POS (Point of Sales) Laravel 5.6 - Role & Permission Users
Use Custom Validation
Untuk menggunakan custom validation yang sudah dibuat pada sub topik sebelumnya cukup mudah, sebagaimana kita menggunakan rules validasi yang sudah disediakan oleh Laravel secara default. Generate controller dengan command:
php artisan make:controller BiodataController
Buka file BiodataController.php
kemudian modifikasi menjadi:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
// use statement untuk memanggil custom rules Birth
use App\Rules\Birth;
class BiodataController extends Controller
{
public function index()
{
return view('welcome');
}
public function store(Request $request)
{
$this->validate(request(), [
// Menggunakan Birth() class yang sudah dibuat.
'birth' => new Birth()
]);
//jika kondisinya benar akan me-return data yang diterima dari form
return request()->birth;
}
}
Untuk view-nya, saya memanfaatkan file welcome.blade.php
saja sebagai contoh, buka file tersebut kemudian modifkasi menjadi:
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel</title>
</head>
<body>
<div class="flex-center position-ref full-height">
<form action="{{ url('/') }}" method="post">
@csrf
<input type="text" name="birth" class="Format Y-m-d">
<p>{{ $errors->first('birth') }}</p>
<input type="submit" name="submit" value="Kirim">
</form>
</div>
</body>
</html>
Buka route web.php
kemudian tambahkan code:
Route::get('/', 'BiodataController@index');
Route::post('/', 'BiodataController@store');
Maka jika di jalankan, apabila kondisinya false akan terlihat seperti ini
Dan jika benar maka akan menampilkan data yang diminta.
Kesimpulan
Laravel telah menyediakan banyak rules yang dapat digunakan, kamu dapat melihatnya di dokumentasinya. Custom validation berlaku apabila kondisi yang di-inginkan tidak ada didalam rules yang telah disediakan.
Comments