Özet - Form Doğrulayıcı
Coddy'nin PHP Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 69 / 91.
Görev
Kolayİlk sorunda durmak yerine tüm doğrulama hatalarını toplayan ve hepsini birden raporlayan bir kullanıcı kayıt formu doğrulayıcısı oluşturalım. Gerçek dünyadaki form doğrulamaları bu şekilde çalışır — kullanıcılar gönderimlerindeki tüm sorunları tek tek düzeltmek yerine hepsini bir kerede görmek isterler.
Kodunuzu dört dosya halinde düzenleyeceksiniz:
ValidationException.php—Exceptionsınıfını genişleten bir temelValidationExceptionsınıfı oluşturun. Bu, doğrulamayla ilgili tüm istisnalar için üst sınıf görevi görür.Exceptions.php— ValidationException dosyasını dahil edin veValidationExceptionsınıfını genişleten üç özel istisna sınıfı oluşturun:RequiredFieldException— Yapıcısında (constructor) bir alan adı alır ve üst sınıfa"[fieldName] is required"mesajını iletirInvalidEmailException— Yapıcısında bir e-posta dizesi alır ve üst sınıfa"'[email]' is not a valid email"mesajını iletirMinLengthException— Yapıcısında bir alan adı ve bir minimum uzunluk (int) alır ve üst sınıfa"[fieldName] must be at least [minLength] characters"mesajını iletir
FormValidator.php— Exceptions dosyasını dahil edin ve şu doğrulama yöntemlerine sahip birFormValidatorsınıfı oluşturun:validateRequired(?string $value, string $fieldName): string— Değer null veya (kırpıldıktan sonra) boşsaRequiredFieldExceptionfırlatır, aksi takdirde kırpılmış değeri döndürürvalidateEmail(string $email): string— E-posta geçersizse (FILTER_VALIDATE_EMAILilefilter_varkullanın)InvalidEmailExceptionfırlatır, aksi takdirde e-postayı döndürürvalidateMinLength(string $value, string $fieldName, int $minLength): string— Dize uzunluğu minimumdan azsaMinLengthExceptionfırlatır, aksi takdirde değeri döndürür
main.php— FormValidator dosyasını dahil edin. Üç girdi alacaksınız: bir kullanıcı adı (username), bir e-posta (email) ve bir şifre (password).Bir
FormValidatorve hata mesajlarını toplamak için boş bir dizi oluşturun. Her alanı ayrı bir try-catch bloğunda doğrulayın:- Kullanıcı adını zorunlu (required) olarak doğrulayın
- E-postayı önce zorunlu olarak doğrulayın, ardından geçerli bir e-posta formatı olarak doğrulayın
- Şifreyi önce zorunlu olarak doğrulayın, ardından minimum 8 karakter uzunluğunda olduğunu doğrulayın
Bir
ValidationExceptionyakaladığınızda, yürütmeyi durdurmak yerine mesajını hatalar dizinize ekleyin.Tüm doğrulamalardan sonra, hatalar varsa her bir hata mesajını kendi satırında yazdırın. Hata yoksa,
"Registration successful"yazdırın.
Raporlamadan önce tüm hataları toplama deseni, iyi bir kullanıcı deneyimi için gereklidir. İstisna hiyerarşiniz, farklı doğrulama hataları için özel istisna türlerine sahip olmaya devam ederken, tek bir catch bloğu ile tüm doğrulama sorunlarını yakalamayı kolaylaştırır.
Kendin dene
<?php
require_once 'FormValidator.php';
// Girdileri oku
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));
// Bir FormValidator örneği oluştur
$validator = new FormValidator();
// Hata mesajlarını toplamak için boş bir dizi oluştur
$errors = [];
// TODO: Kullanıcı adını bir try-catch bloğu içinde zorunlu olarak doğrula
// ValidationException'ı yakala ve mesajını $errors dizisine ekle
// TODO: E-postayı önce zorunlu olarak doğrula, ardından geçerli bir e-posta formatı olarak doğrula
// Bir try-catch bloğu kullan ve tüm hata mesajlarını $errors dizisine ekle
// TODO: Parolayı önce zorunlu olarak doğrula, ardından minimum 8 karakter uzunluğunu doğrula
// Bir try-catch bloğu kullan ve tüm hata mesajlarını $errors dizisine ekle
// TODO: Tüm doğrulamalardan sonra:
// - Eğer hatalar varsa, her bir hata mesajını kendi satırında yazdır
// - Eğer hata yoksa, "Registration successful" yazdır
?>Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar KelimesiMetotlarÖzelliklerYapıcı Metot (__construct)Yıkıcı Metot (__destruct)Özet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar KelimesiMetot Geçersiz Kılmafinal Anahtar KelimesiSoyut SınıflarÖzet - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicilere Derinlemesine BakışGetter ve Setter MetotlarıBilgi GizlemeConstructor Promotion (8.0)Özet - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımDependency InjectionAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlama: Derinlemesine İncelemeGenerator'lar ve Iterator'lar13Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı2İsim Alanları ve Autoloading
İsim Alanlarına Girişuse Anahtar KelimesiPSR-4 Autoloading StandartıComposer AutoloaderÖzet - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Fazla Arayüz UygulamaArayüz vs Soyut SınıfArayüzler ile Tip BelirlemeÖzet - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Nesne Klonlama__serialize & __unserializeÖzet - Özel Koleksiyon11Tip Sistemi ve Hata Yönetimi
Tip BildirimleriNullable TiplerBirleşim ve Kesişim Tipleriİstisna SınıflarıÖzel İstisna HiyerarşisiTry, Catch, FinallyÖzet - Form Doğrulayıcı3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerReadonly Özellikler (PHP 8.1)Özet - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmaya Yeniden BakışArayüzler ile Çok BiçimlilikType Hinting ve Union TypesLate Static BindingÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişÇoklu Trait KullanımıTrait Çakışma ÇözümüTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım12Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı15Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi