Nxdom Framework

Nusantara eXtreme Development Object Model — dokumentasi resmi

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' ]);
Catatan:
  • 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 untuk Password, File, Textarea, dll.
  • Batasi file lewat setUpload, bukan string palsu di aturan.
  • Ubah password + konfirmasi: field baru passwordbaru + PasswordConfirm pada 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'] ]);
Rekomendasi: Satu gaya per field; jangan mencampur Pipe panjang yang bisa tertafsir sebagai Original.

Lanjut

Sebelumnya: NexaForm dasar. Berikutnya: Upload berkas. Indeks Forms · Dokumentasi · Beranda.