Form Validation
Hal yang paling umum dilakukan pada aplikasi berbasis web adalah mengumpulkan data dari user. Data dikumpulkan melalui satu atau lebih form HTML. Data yang sudah terkumpul harus diolah, divalidasi dan kemudian ditampilkan pesan error jika ada data yang tidak sesuai.
Untuk mempermudah proses ini, Panada telah menyediakan tools validasi yang bisa digunakan untuk mempercepat pengolahan data yang bersumber dari form HTML.
Validation Rule
Petama-tama harus dibuat validation rule yang diletakkan di dalam sebuah class model. Class model ini harus extend dari class Resources\Validation. List rule di tempatkan pada sebuah method dengan nama setRules. Berikut adalah contoh rule untuk form registration:
Keterangan
- username, email, password, repassword dan photo adalah nama atribut name yang ada di setiap field form HTML.
- rules adalah daftar rule yang ingin diimplementasikan.
- label adalah nama label yang digunakan untuk memudahkan user melakukan input.
- filter, adalah daftar nama fungsi yang digunakan untuk mem-filter nilai input. Fungsi yang digunakan adalah semua fungsi native PHP yang bisa menerima satu parameter.
Setelah ini kita kan buat sebuah file view.
View File
Langkah selanjutnya adalah membuat sebuah file view yang berisi tag HTML dengan field-field yang dibutuhkan. Berikut adalah sebuah file dengan nama registration_form.php
Keterangan
Pada file HTML di atas, kita sudah menggunakan method $registration->errorMessages(). Jika method ini digunakan tanpa parameter apapun, maka nilai returnnya adalah array yang berisi daftar pesan error.
Jika penggunaan parameternya seperti berikut $registration->errorMessages(false, '<li>', '</li>'), maka data ditampilkan berupa string yang setiap errornya diawali dengan tag <li> dan diakhiri dengan tag </li>.
Jika parameter pertama diisi dengan nama field maka error yang ditampilkan adalah error pada field tersebut.
Controller
Berikut adalah contoh controller untuk menerima request dari form HTML.
Method validate() akan memberikan nilai true atau false:
bool $registration->validate();
Jika method validate() memberikan nilai true maka nilai input yang sudah divalidasi bisa didapatkan dari method value().
array $registration->value();
Rule List
Berikut adalah datar rule yang bisa digunakan:
Rule | Keterangan | Contoh |
---|---|---|
required | Nilai field tidak boleh dikosongkan. | rules => array('required') |
Nilai field harus berformat email. | rules => array('email') | |
min | Nilai field harus tidak kurang dari nilai yang telah ditentukan. | rules => array('min' => 3) |
max | Nilai field harus tidak lebih dari nilai yang telah ditentukan. | rules => array('max' => 10) |
compare | Membandingkan nilai sebuah field dengan field lain yang telah ditentukan. | rules => array('max' => 10) |
file | Nilai field file tidak boleh dikosongkan. | rules => array('compare' => 'comparator_field') |
in | Membandingkan nilai sebuah field dengan nilai yang sudah ditentukan sebelumnya. | rules => array('in' => array('male','female')) |
regex | Membandingkan nilai sebuah field dengan pola regular expression yang sudah ditentukan sebelumnya. | rules => array('regex' => '/[^a-zA-Z0-9s .,"\']/') |
url | Nilai field harus berformat URL. | rules => array('url') |
alpha | Nilai sebuah field harus alphabet. | rules => array('alpha') |
numeric | Nilai field harus berformat numeric. | rules => array('numeric') |
alphanumeric | Nilai sebuah field harus alphabet dan atau numeric. | rules => array('alphanumeric') |
match | Jumlah karakter nilai sebuah field sejumlah tertentu dengan ukuran yang sudah ditentukan sebelumnya. | rules => array('match' => 7) |
callback | Nilai sebuah field divalidasi pada sebuah method yang kita buat sendiri. | rules => array('callback' => 'methodName') |
Costume Error Message
Kita bisa melakukan kostumasi terhadap pesan error yang ingin ditampilkan. Untuk melakukan ini kita bisa menggunakan method setRuleErrorMessages() yang dipanggil pada constructor model seperti contoh berikut:
Nilai %label%, %size% dan %comparatorLabel% akan digantikan dengan nilai yang sudah ditentukan.