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

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

جزء من قسم البرمجة كائنية التوجه في رحلة PHP على Coddy. الدرس 69 من 91.

challenge icon

التحدي

سهل

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

ستنظم شفرتك عبر أربعة ملفات:

  • ValidationException.php: أنشئ فئة أساسية باسم ValidationException تمتد من Exception. ستعمل هذه الفئة كفئة أصل لجميع الاستثناءات المرتبطة بالتحقق.
  • Exceptions.php: أدرج ملف ValidationException وأنشئ ثلاث فئات استثناء محددة تمتد من ValidationException:
    • RequiredFieldException: تقبل اسم حقل في الباني الخاص بها، وتمرر الرسالة "[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: بعد جميع عمليات التحقق:
// - إذا كانت هناك أخطاء، اطبع كل رسالة خطأ في سطرها الخاص
// - If there are no errors, print "Registration successful"

?>

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم PHP عبر الإنترنت