Menu
Coddy logo textTech

Ö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.

challenge icon

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.phpException sınıfını genişleten bir temel ValidationException sı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 ve ValidationException sı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ı iletir
    • InvalidEmailException — Yapıcısında bir e-posta dizesi alır ve üst sınıfa "'[email]' is not a valid email" mesajını iletir
    • MinLengthException — 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 bir FormValidator sınıfı oluşturun:
    • validateRequired(?string $value, string $fieldName): string — Değer null veya (kırpıldıktan sonra) boşsa RequiredFieldException fırlatır, aksi takdirde kırpılmış değeri döndürür
    • validateEmail(string $email): string — E-posta geçersizse (FILTER_VALIDATE_EMAIL ile filter_var kullanın) InvalidEmailException fırlatır, aksi takdirde e-postayı döndürür
    • validateMinLength(string $value, string $fieldName, int $minLength): string — Dize uzunluğu minimumdan azsa MinLengthException fı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 FormValidator ve 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 ValidationException yakaladığı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