Tekrar - 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 doğrulama hatalarını toplayıp hepsini aynı anda bildiren bir kullanıcı kayıt formu doğrulayıcısı oluşturalım. Gerçek dünyadaki form doğrulama işlemi bu şekilde çalışır: kullanıcılar gönderimlerindeki tüm sorunları görmek, bunları tek tek düzeltmek zorunda kalmamak ister.
Kodunuzu dört dosyaya ayıracaksınız:
ValidationException.php:ValidationExceptionsınıfını genişleten temel birExceptionsınıfı oluşturun. Bu sınıf, doğrulamayla ilgili tüm istisnaların üst sınıfı olarak görev yapar.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 bir alan adı kabul eder ve"[fieldName] is required"mesajını üst sınıfa iletirInvalidEmailException: Yapıcısında bir e-posta dizesi kabul eder ve"'[email]' is not a valid email"mesajını üst sınıfa iletirMinLengthException: Yapıcısında bir alan adı ve minimum uzunluk (int) kabul eder ve"[fieldName] must be at least [minLength] characters"mesajını üst sınıfa iletir
FormValidator.php: Exceptions dosyasını dahil edin ve aşağıdaki doğrulama metotlarına sahip birFormValidatorsınıfı oluşturun:validateRequired(?string $value, string $fieldName): string: Değer null veya boşsa (trim işleminden sonra)RequiredFieldExceptionfırlatır; aksi takdirde trim uygulanmış değeri döndürürvalidateEmail(string $email): string: E-posta geçersizse (InvalidEmailExceptionilefilter_varkullanın)FILTER_VALIDATE_EMAILfırlatır; aksi takdirde e-postayı döndürürvalidateMinLength(string $value, string $fieldName, int $minLength): string: Dize uzunluğu minimumdan kısaysaMinLengthExceptionfırlatır; aksi takdirde değeri döndürür
main.php: FormValidator dosyasını dahil edin. Üç girdi alacaksınız: kullanıcı adı, e-posta ve parola.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ı gerekli alan olarak doğrulayın
- Önce e-postayı gerekli alan olarak doğrulayın, ardından geçerli bir e-posta biçiminde olup olmadığını doğrulayın
- Önce parolayı gerekli alan olarak doğrulayın, ardından minimum 8 karakter uzunluğuna sahip olduğunu doğrulayın
Bir
ValidationExceptionyakalandığında, yürütmeyi durdurmak yerine mesajını hata dizinize ekleyin.Tüm doğrulamalardan sonra hata varsa her hata mesajını kendi satırına yazdırın. Hata yoksa
"Registration successful"yazdırın.
Tüm hataları bildirmeden önce toplama yaklaşımı, 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 tüm doğrulama sorunlarını tek bir catch bloğuyla yakalamanızı 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ı try-catch bloğunda zorunlu olarak doğrula
// ValidationException yakala ve mesajını $errors dizisine ekle
// TODO: E-postayı önce zorunlu olarak doğrula, sonra geçerli bir e-posta formatı olarak doğrula
// Bir try-catch bloğu kullan ve herhangi bir hata mesajını $errors dizisine ekle
// TODO: Parolayı önce zorunlu olarak doğrula, sonra minimum 8 karakter uzunluğunu doğrula
// Bir try-catch bloğu kullan ve herhangi bir hata mesajını $errors dizisine ekle
// TODO: Tüm doğrulamalardan sonra:
// - Hatalar varsa, her hata mesajını kendi satırına yazdır
// - If there are no errors, print "Registration successful"
?>Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesneler$this Anahtar SözcüğüMetotlarÖzelliklerYapıcı (__construct)Yıkıcı (__destruct)Tekrar - Basit Hesap Makinesi4Kalıtım
Temel Kalıtımparent:: Anahtar SözcüğüMetot Geçersiz Kılmafinal Anahtar SözcüğüSoyut SınıflarTekrar - Çalışan Hiyerarşisi7Kapsülleme
Public, Protected, PrivateErişim Belirleyicileri DerinlemesineGetter ve Setter'larBilgi GizlemeYapıcı Özellik Terfisi (8.0)Tekrar - Öğrenci Kayıt Sistemi10İleri Düzey OOP Kavramları
Composition ve KalıtımBağımlılık EnjeksiyonuAnonim SınıflarEnum'lar (PHP 8.1)Fiber'lar (PHP 8.1)Nesne Klonlamaya Derinlemesine BakışÜreteçler ve Yineleyiciler13Tasarı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ıBileşik KalıpDepo Kalıbı2Namespace’ler ve Autoloading
Namespace’lere Girişuse Anahtar SözcüğüPSR-4 Autoloading StandardıComposer AutoloaderTekrar - Düzenli Proje5Arayüzler ve Sözleşmeler
Arayüzlere GirişArayüzleri UygulamaBirden Çok Arayüz UygulamaArayüz ve Soyut Sınıf KarşılaştırmasıArayüzlerle Tür İpuçlarıTekrar - Şekil Hesaplayıcı8Sihirli Metotlar
Sihirli Metotlara Giriş__toString ve __debugInfo__get, __set, __isset, __unset__call ve __callStatic__clone ve Nesne Klonlama__serialize ve __unserializeTekrar - Özel Koleksiyon11Tür Sistemi ve Hata Yönetimi
Tür BildirimleriNullable TürlerBirleşim ve Kesişim Türleriİstisna SınıflarıÖzel İstisna HiyerarşisiTry, Catch, FinallyTekrar - Form Doğrulayıcı3Sınıf Özellikleri
Örnek ve Statik ÖzelliklerSınıflarda SabitlerStatik Metotlar ve ÖzelliklerPrivate ve Protected ÖzelliklerSalt Okunur Özellikler (PHP 8.1)Tekrar - Banka Hesabı Yöneticisi6Çok Biçimlilik
Metot Geçersiz Kılmayı Yeniden Ele AlmaArayüzler Yoluyla Çok BiçimlilikTür İpuçları ve Birleşim TürleriGeç Bağlanan Statik ÇağrılarÖzet - Ödeme İşlemcisi9Trait'ler
Trait'lere GirişBirden Çok Trait KullanımıTrait Çakışmalarını ÇözümlemeTrait'lerde Soyut MetotlarTrait'ler ve Kalıtım Karşılaştırması12Tasarım Desenleri 1. Bölüm
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy DeseniKendi başına pratik yap: Online PHP derleyicisi