Validasi form
Memeriksa input pengguna dengan aturan NexaForm dan trait NexaValidation — format Original, Format Pipe, dan pesan error.
NexaForm · NexaValidation
Pengenalan Validasi Form
Validasi form memastikan input sesuai kriteria. NexaForm memakai trait NexaValidation;
validateAll dipanggil dari process().
Format Aturan Validasi
Dua format: Original (satu aturan klasik per field) dan Pipe (beberapa aturan, sintaks mirip Laravel).
1. Format Original
Pola Tipe|parameter_utama|pesan_error_opsional. Hanya tipe yang didukung parser lama; untuk angka rentang, URL, dll. gunakan Format Pipe.
$form->fields([
'username' => 'Name|3|Username minimal 3 karakter',
'email' => 'Email',
'bio' => 'Textarea|10|Isi minimal 10 karakter',
'profile_image' => 'File',
'avatar' => 'FileOptional'
]);
$form->fields([
'username' => ['Name', '3', 'Username minimal 3 karakter'],
'email' => ['Email'],
'bio' => ['Textarea', '10', 'Bio wajib diisi']
]);
Untuk umur, angka, min/max, huruf saja, alfanumerik gunakan Pipe di bawah (bukan Original Number / Alpha terpisah).
2. Format Pipe
Beberapa aturan: rule1|rule2:arg|rule3. Pesan kustom bisa sebagai segmen terakhir jika bukan nama aturan.
$form->fields([
'username' => 'required|min:3|max:20|alphaNum',
'age' => 'required|numeric|min:18|max:100',
'status' => 'required|in:active,inactive,pending',
'email' => 'required|email',
'description' => 'required|min:10|max:1000'
]);- Original:
Tipe|parameter|pesan— lihat tabel A. - Pipe:
rule1|rule2:arg1,arg2— pemisah|, argumen setelah:.
Aturan Validasi yang Tersedia
Original memanggil method validate… klasik; Pipe memakai nama aturan lowercase.
A. Format Original (didukung parser)
Nama tipe case-insensitive di string; array memakai elemen pertama sebagai tipe.
| Aturan | Parameter | Deskripsi |
|---|---|---|
Name |
min_length | Panjang teks minimal (UTF-8). |
Title |
min_length | Panjang judul minimal. |
Address |
min_length | Alamat minimal sekian karakter. |
Email |
- | Format email (filter PHP). |
Phone |
- | Nomor telepon (digit, minimal 10). |
Password |
min_length | Wajib diisi, minimal panjang, harus ada angka dan huruf. |
OldPassword |
- | Cek kata sandi lama (perlu setTempData user id + hash). |
NewPassword |
min_length | Kata sandi baru (huruf + angka; tidak sama dengan field password jika diisi). |
PasswordConfirm |
min_length | Harus sama dengan field passwordbaru (bukan password). |
Select |
- | Tidak kosong / bukan placeholder (0, -, default). |
Textarea |
min_length | Wajib diisi dan panjang minimal. |
File |
- | File wajib terunggah. Tipe/ukuran lewat setUpload() + NexaFile, bukan dari string aturan. |
FileOptional |
- | File boleh kosong; jika ada upload, harus sukses. |
Json |
- | String JSON valid. |
B. Format Pipe
| Aturan | Parameter | Deskripsi |
|---|---|---|
required |
- | Field wajib diisi. |
min / max |
number | Panjang string atau batas nilai numerik. |
numeric |
- | Harus numerik. |
alpha |
- | Hanya huruf. |
alphaNum |
- | Huruf dan angka (tanpa spasi). |
email |
- | Format email. |
phone |
- | Telepon (minimal 10 digit). |
date |
date:Y-m-d (opsional) |
Tanggal valid; default Y-m-d, ada fallback format umum. |
json |
- | JSON valid. |
in |
in:a,b,c atau in:option |
Nilai dalam daftar; in:option untuk pilihan dinamis. |
file / fileOptional |
- | Setara Original File / FileOptional. |
Custom Validation Messages
Original: pesan sebagai bagian ketiga string (atau indeks ke-2 array). Pipe: segmen terakhir bisa pesan kustom jika bukan nama aturan.
$form->fields([
'username' => 'Name|3|Username minimal 3 karakter',
'email' => 'Email',
'password' => 'Password|8|Password minimal 8 karakter dan harus huruf+angka'
]);Validasi Kondisional
Bangun array aturan di controller, lalu fields():
$validationRules = [
'name' => 'Name|3|Nama minimal 3 karakter',
'email' => 'Email'
];
if ($this->getPost('different_shipping_address') == '1') {
$validationRules['shipping_address'] = 'Textarea|10|Alamat pengiriman wajib diisi';
}
$form->fields($validationRules);Validasi File Upload
File / FileOptional (atau pipe file / fileOptional) memastikan upload ada/tidak error.
Ekstensi dan ukuran di setUpload() (NexaFile: maxSize, allowedExtensions).
$form->fields([
'profile_image' => 'File',
'resume' => 'FileOptional'
])
->setUpload([
'maxSize' => '5MB',
'allowedExtensions' => ['jpg', 'png', 'gif', 'pdf', 'doc', 'docx']
]);Menangani Hasil Validasi
process() mengembalikan success, data, errors, serta processed, informasi, postData.
Jika upload sukses, ada files.
$result = $form->process();
if ($result['success']) {
$validData = $result['data'];
$files = $result['files'] ?? [];
} else {
$errors = $result['errors'];
}Validasi melalui process()
validateField tidak diekspose di NexaForm. Validasi jalan di process() → validateAll.
Setelah gagal, pakai getCurrentErrors() atau Response() untuk template.
$form = NexaForm::createForm()
->fields([
'email' => 'Email',
'password' => 'Password|8|Password minimal 8 karakter'
]);
$result = $form->process(false);
if (!$result['success']) {
$errors = $form->getCurrentErrors();
}Best Practices
- Selalu validasi di server meskipun ada validasi klien.
- Pipe untuk angka, panjang,
in,email; Original untukPassword,File,Textarea, dll. - Batasi file lewat
setUpload, bukan string palsu di aturan. - Ubah password + konfirmasi: field baru
passwordbaru+PasswordConfirmpada field konfirmasi.
Contoh Kombinasi Format
$form = NexaForm::createForm()
->fields([
'password' => 'password|8|Password minimal 8 karakter',
'document' => 'file',
'optional_image' => 'fileOptional',
'json_config' => 'json',
'username' => 'required|min:3|max:20|alphaNum',
'email' => 'required|email',
'age' => 'required|numeric|min:18',
'role' => 'required|in:admin,user,editor'
])
->setUpload([
'maxSize' => '2MB',
'allowedExtensions' => ['jpg', 'pdf']
]);Lanjut
Sebelumnya: NexaForm dasar. Berikutnya: Upload berkas. Indeks Forms · Dokumentasi · Beranda.