Menu
Coddy logo textTech

סיכום – מאמת טפסים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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: בדקו ש-username הוא שדה חובה בתוך בלוק try-catch
// תפסו את ValidationException והוסיפו את ההודעה שלו למערך $errors

// TODO: בדקו תחילה ש-email הוא שדה חובה, ואז בדקו שהוא בפורמט תקין של כתובת אימייל
// השתמשו בבלוק try-catch והוסיפו הודעות שגיאה כלשהן למערך $errors

// TODO: בדקו תחילה ש-password הוא שדה חובה, ואז בדקו שאורכו לפחות 8 תווים
// השתמשו בבלוק try-catch והוסיפו הודעות שגיאה כלשהן למערך $errors

// TODO: לאחר כל הבדיקות:
// - אם יש שגיאות, הדפיסו כל הודעת שגיאה בשורה נפרדת
// - אם אין שגיאות, הדפיסו "Registration successful"

?>

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר PHP אונליין