Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - مدقق النماذج

جزء من قسم Object Oriented Programming في رحلة PHP على Coddy — الدرس 69 من 91.

challenge icon

التحدي

سهل

لنقم ببناء مدقق لنموذج تسجيل المستخدم يقوم بجمع أخطاء التحقق والإبلاغ عنها جميعاً دفعة واحدة، بدلاً من التوقف عند المشكلة الأولى. هذه هي الطريقة التي يعمل بها التحقق من صحة النماذج في العالم الحقيقي — يريد المستخدمون رؤية جميع المشكلات المتعلقة ببياناتهم المرسلة، وليس إصلاحها واحدة تلو الأخرى.

ستقوم بتنظيم الكود الخاص بك عبر أربعة ملفات:

  • ValidationException.php — أنشئ فئة أساسية باسم ValidationException ترث من Exception. تعمل هذه الفئة كأب لجميع الاستثناءات المتعلقة بالتحقق من الصحة.
  • Exceptions.php — قم بتضمين ملف ValidationException وأنشئ ثلاث فئات استثناءات محددة ترث من ValidationException:
    • RequiredFieldException — تقبل اسم الحقل في منشئها (constructor) وتمرر الرسالة "[fieldName] is required" إلى الأب
    • InvalidEmailException — تقبل سلسلة بريد إلكتروني في منشئها وتمرر الرسالة "'[email]' is not a valid email" إلى الأب
    • MinLengthException — تقبل اسم الحقل والحد الأدنى للطول (int) في منشئها وتمرر الرسالة "[fieldName] must be at least [minLength] characters" إلى الأب
  • FormValidator.php — قم بتضمين ملف Exceptions وأنشئ فئة FormValidator تحتوي على طرق التحقق التالية:
    • validateRequired(?string $value, string $fieldName): string — تطلق RequiredFieldException إذا كانت القيمة null أو فارغة (بعد إزالة المسافات الزائدة)، وإلا فإنها تعيد القيمة بعد إزالة المسافات
    • validateEmail(string $email): string — تطلق InvalidEmailException إذا كان البريد الإلكتروني غير صالح (استخدم filter_var مع FILTER_VALIDATE_EMAIL)، وإلا فإنها تعيد البريد الإلكتروني
    • validateMinLength(string $value, string $fieldName, int $minLength): string — تطلق MinLengthException إذا كان طول السلسلة أقل من الحد الأدنى، وإلا فإنها تعيد القيمة
  • main.php — قم بتضمين ملف FormValidator. ستتلقى ثلاثة مدخلات: اسم مستخدم، وبريد إلكتروني، وكلمة مرور.

    أنشئ كائناً من FormValidator ومصفوفة فارغة لجمع رسائل الخطأ. قم بالتحقق من صحة كل حقل في كتلة try-catch منفصلة:

    • التحقق من أن اسم المستخدم مطلوب
    • التحقق من أن البريد الإلكتروني مطلوب أولاً، ثم التحقق من أنه بتنسيق بريد إلكتروني صالح
    • التحقق من أن كلمة المرور مطلوبة أولاً، ثم التحقق من أن طولها لا يقل عن 8 أحرف

    عند التقاط ValidationException، أضف رسالته إلى مصفوفة الأخطاء بدلاً من إيقاف التنفيذ.

    بعد جميع عمليات التحقق، إذا كانت هناك أخطاء، اطبع كل رسالة خطأ في سطر منفصل. إذا لم تكن هناك أخطاء، اطبع "Registration successful".

هذا النمط من جمع كافة الأخطاء قبل الإبلاغ عنها ضروري لتجربة مستخدم جيدة. إن التسلسل الهرمي للاستثناءات الخاص بك يجعل من السهل التقاط جميع مشكلات التحقق باستخدام كتلة catch واحدة مع استمرار وجود أنواع استثناءات محددة لفشل التحقق المختلف.

جرّب بنفسك

<?php
require_once 'FormValidator.php';

// قراءة المدخلات
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));

// إنشاء نسخة من FormValidator
$validator = new FormValidator();

// إنشاء مصفوفة فارغة لجمع رسائل الخطأ
$errors = [];

// TODO: التحقق من أن اسم المستخدم مطلوب في كتلة try-catch
// التقاط ValidationException وإضافة رسالته إلى مصفوفة $errors

// TODO: التحقق من أن البريد الإلكتروني مطلوب أولاً، ثم التحقق من أنه بتنسيق بريد إلكتروني صالح
// استخدام كتلة try-catch وإضافة أي رسائل خطأ إلى مصفوفة $errors

// TODO: التحقق من أن كلمة المرور مطلوبة أولاً، ثم التحقق من أن الحد الأدنى للطول هو 8 أحرف
// استخدام كتلة try-catch وإضافة أي رسائل خطأ إلى مصفوفة $errors

// TODO: بعد جميع عمليات التحقق:
// - إذا كانت هناك أخطاء، اطبع كل رسالة خطأ في سطر منفصل
// - إذا لم تكن هناك أخطاء، اطبع "Registration successful"

?>

جميع دروس Object Oriented Programming