Rekap: Validator Form
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 69 dari 91.
Tantangan
MudahMari 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 dasarValidationExceptionyang mewarisiException. Class ini menjadi induk untuk semua exception yang terkait dengan validasi.Exceptions.php: Sertakan file ValidationException dan buat tiga class exception khusus yang mewarisiValidationException:RequiredFieldException: Menerima nama field di constructornya dan meneruskan pesan"[fieldName] is required"ke induknyaInvalidEmailException: Menerima string email di constructornya dan meneruskan pesan"'[email]' is not a valid email"ke induknyaMinLengthException: 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 classFormValidatordengan method validasi berikut:validateRequired(?string $value, string $fieldName): string: MelemparRequiredFieldExceptionjika nilainya null atau kosong (setelah dipangkas), jika tidak, mengembalikan nilai yang sudah dipangkasvalidateEmail(string $email): string: MelemparInvalidEmailExceptionjika email tidak valid (gunakanfilter_vardenganFILTER_VALIDATE_EMAIL), jika tidak, mengembalikan emailvalidateMinLength(string $value, string $fieldName, int $minLength): string: MelemparMinLengthExceptionjika 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
FormValidatordan 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
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online