Membuat Custom Validation di Laravel 5.6

Membuat Custom Validation di Laravel 5.6

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

custom validation laravel

Dan jika benar maka akan menampilkan data yang diminta.

custom validation laravel

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.

Category:
Share:

Comments