Menu
CoddyTech

Rekap: Validator Form

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 69 dari 91.

challenge icon

Tantangan

Mudah

Mari buat validator formulir pendaftaran pengguna yang mengumpulkan error validasi dan melaporkan semuanya sekaligus, alih-alih berhenti pada masalah pertama. Beginilah cara kerja validasi formulir di dunia nyata: pengguna ingin melihat semua masalah pada kiriman mereka, bukan memperbaikinya satu per satu.

Kamu akan menyusun kodemu dalam empat file:

  • ValidationException.php: Buat class dasar ValidationException yang mewarisi Exception. Class ini menjadi induk untuk semua exception yang terkait dengan validasi.
  • Exceptions.php: Sertakan file ValidationException dan buat tiga class exception khusus yang mewarisi ValidationException:
    • RequiredFieldException: Menerima nama field di constructornya dan meneruskan pesan "[fieldName] is required" ke induknya
    • InvalidEmailException: Menerima string email di constructornya dan meneruskan pesan "'[email]' is not a valid email" ke induknya
    • MinLengthException: Menerima nama field dan panjang minimum (int) di constructornya, lalu meneruskan pesan "[fieldName] must be at least [minLength] characters" ke induknya
  • FormValidator.php: Sertakan file Exceptions dan buat class FormValidator dengan method validasi berikut:
    • validateRequired(?string $value, string $fieldName): string: Melempar RequiredFieldException jika nilainya null atau kosong (setelah dipangkas), jika tidak, mengembalikan nilai yang sudah dipangkas
    • validateEmail(string $email): string: Melempar InvalidEmailException jika email tidak valid (gunakan filter_var dengan FILTER_VALIDATE_EMAIL), jika tidak, mengembalikan email
    • validateMinLength(string $value, string $fieldName, int $minLength): string: Melempar MinLengthException jika panjang string kurang dari panjang minimum, jika tidak, mengembalikan nilainya
  • main.php: Sertakan file FormValidator. Kamu akan menerima tiga input: nama pengguna, email, dan kata sandi.

    Buat FormValidator dan array kosong untuk mengumpulkan pesan error. Validasi setiap field dalam blok try-catch terpisah:

    • Validasi nama pengguna sebagai field wajib
    • Validasi email sebagai field wajib terlebih dahulu, lalu validasi apakah formatnya adalah email yang valid
    • Validasi kata sandi sebagai field wajib terlebih dahulu, lalu validasi apakah panjangnya minimal 8 karakter

    Saat menangkap ValidationException, tambahkan pesannya ke array errors, alih-alih menghentikan eksekusi.

    Setelah semua validasi selesai, jika ada error, cetak setiap pesan error pada barisnya sendiri. Jika tidak ada error, cetak "Registration successful".

Pola mengumpulkan semua error sebelum melaporkannya ini penting untuk memberikan pengalaman pengguna yang baik. Hierarki exception-mu memudahkanmu menangkap semua masalah validasi dengan satu blok catch, sekaligus tetap memiliki tipe exception khusus untuk berbagai kegagalan validasi.

Coba sendiri

<?php
require_once 'FormValidator.php';

// Baca input
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));

// Buat instance FormValidator
$validator = new FormValidator();

// Buat array kosong untuk menampung pesan error
$errors = [];

// TODO: Validasi username sebagai isian wajib dalam blok try-catch
// Tangkap ValidationException dan tambahkan pesannya ke array $errors

// TODO: Validasi email sebagai isian wajib terlebih dahulu, lalu periksa apakah format email valid
// Gunakan blok try-catch dan tambahkan setiap pesan error ke array $errors

// TODO: Validasi password sebagai isian wajib terlebih dahulu, lalu periksa panjang minimal 8 karakter
// Gunakan blok try-catch dan tambahkan setiap pesan error ke array $errors

// TODO: Setelah semua validasi selesai:
// - Jika ada error, cetak setiap pesan error pada baris tersendiri
// - Jika tidak ada error, cetak "Registration successful"

?>

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online