Memakai Validator Di Laravel


Laravel menyediakan sebuah validator sederhana yang diwakili oleh class Illuminate\Validation\Validator. Berbeda dengan Hibernate Validator dimana yang di-validasi adalah sebuah object, Illuminate\Validation\Validator hanya men-validasi array. Aturan validasi diberikan dalam bentuk string. Sebagai contoh, ini adalah kode program untuk melakukan validasi di Laravel:

Route::get('/test', function() {      
    $validator = Validator::make(
        ['email' => 'Solid Snake', 'password' => '12345'],
        ['email' => 'required|email', 'password' => 'required|min:5']);
    if ($validator->passes()) {
        $hasil = 'Data sudah benar.';
    } else {
        $hasil = 'Data salah.';
    }
    return $hasil;
});

Kode program di atas akan memanggil method make() dari Illuminate\Validation\Factory yang akan menghasilkan sebuah object Illuminate\Validation\Validator. Setelah itu, saya dapat memanggil method passes() atau fails() dari Illuminate\Validation\Validator yang akan mengembalikan sebuah nilai boolean.

Aturan validasi seperti email, required, min dan sebagainya didefinisikan sebagai method di Illuminate\Validation\Validator. Sebagai contoh, pada class tersebut, saya dapat menemukan method validateEmail(), validateRequired(), validateMin() dan sebagainya. Daftar aturan validasi yang lengkap beserta dokumentasinya dapat dijumpai di http://laravel.com/docs/validation.

Untuk mendapatkan pesan deskripsi mengenai kesalahan bila terdapat pelanggaran aturan validasi, saya dapat membuat kode program seperti:

Route::get('/test', function() {      
    $validator = Validator::make(
        ['email' => 'test.com', 'password' => '1234'],
        ['email' => 'email', 'password' => 'required|min:5']);
    if ($validator->passes()) {
        $hasil = 'Data sudah benar.';
    } else {
        $hasil = $validator->errors();       
    }
    return $hasil;
});

Kode program di atas akan menghasilkan output seperti:

{"email":["The email must be a valid email address."],"password":["The password must be at least 5 characters."]}

Method errors() dari Illuminate\Validation\Validator akan mengembalikan pesan kesalahan dalam bentuk instance dari class Illuminate\Support\MessageBag. Class tersebut mengimplementasikan interface JsonableInterface dan method __toString() nya telah di-override agar mengembalikan hasil dalam bentuk JSON. Bila tidak ingin memperoleh hasil dalam bentuk JSON, saya juga bisa melakukan enumerasi dengan memanggil method all() seperti pada contoh berikut ini:

$hasil = 'Daftar kesalahan:<br>' . implode($validator->errors()->all(), '<br>');

Untuk membuat pesan kesalahan yang berbeda, misalnya dalam bahasa Indonesia, saya dapat membuat kode program seperti berikut ini:

Route::get('/test', function() {      
    $validator = Validator::make(
        ['email' => 'test.com', 'password' => '1234'],
        ['email' => 'email', 'password' => 'required|min:5'],
        ['email' => 'Email Anda salah.', 
         'password.required' => 'Password harus diisi.', 
         'password.min' => 'Password minimal :min karakter.']);
    if ($validator->passes()) {
        $hasil = 'Data sudah benar.';
    } else {    
        $hasil = 'Daftar kesalahan:<br>' . implode($validator->errors()->all(), '<br>');          
    }
    return $hasil;
});

Kode program di atas akan mengembalikan hasil seperti:

Daftar kesalahan:
Email Anda salah.
Password minimal 5 karakter.

Memberikan pesan kesalahan secara manual setiap kali melakukan validasi adalah hal yang melelahkan. Oleh sebab itu, saya dapat melakukan perubahan secara global dengan mengubah nilai pesan kesalahan di file app/lang/en/validation.php.

Selain itu, saya juga bisa membuat pesan kesalahan yang berbeda sesuai dengan bahasa dengan membuat struktur folder seperti pada gambar berikut ini:

Struktur folder untuk i18n di Laravel

Struktur folder untuk i18n di Laravel

Untuk berpindah ke locale yang berbeda, saya dapat menggunakan perintah App::setLocale() seperti:

App::setLocale('id');

Laravel akan memakai pesan kesalahan di file validation.php pada folder yang memiliki kode yang sesuai dengan locale yang sedang aktif.

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: