סיכום – מאמת טפסים
חלק מהיחידה תכנות מונחה עצמים במסלול ה-PHP של Coddy. שיעור 69 מתוך 91.
אתגר
קלבואו נבנה מאמת לטופס הרשמת משתמשים, שאוסף שגיאות אימות ומדווח עליהן בבת אחת, במקום לעצור בבעיה הראשונה. כך פועל אימות טפסים בעולם האמיתי: משתמשים רוצים לראות את כל הבעיות בהגשה שלהם, ולא לתקן אותן אחת בכל פעם.
תארגנו את הקוד שלכם בארבעה קבצים:
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"
?>כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים (OOP)
קבצים חיצונייםמבוא ל-OOPמחלקות לעומת אובייקטיםמילת המפתח $thisמתודותמאפייניםבנאי (__construct)הורס (__destruct)חזרה: מחשבון פשוט4ירושה
ירושה בסיסיתמילת המפתח parent::דריסת מתודותמילת המפתח finalמחלקות מופשטותסיכום – היררכיית עובדים7כימוס
ציבורי, מוגן, פרטימפרטי גישה לעומקמתודות גישה ועדכוןהסתרת מידעקידום פרמטרים בבנאי (8.0)סיכום – מערכת רישומי תלמידים2מרחבי שמות וטעינה אוטומטית
מבוא למרחבי שמותמילת המפתח useתקן הטעינה האוטומטית PSR-4הטוען האוטומטי של Composerסיכום – פרויקט מאורגן5ממשקים וחוזים
מבוא לממשקיםמימוש ממשקיםמימוש של כמה ממשקיםממשק לעומת מחלקה מופשטתרמזי טיפוסים עם ממשקיםסיכום - מחשבון צורות8מתודות קסם
מבוא למתודות קסם__toString ו־__debugInfo__get, __set, __isset, __unset__call ו־__callStatic__clone ושיבוט אובייקטים__serialize ו־__unserializeסיכום – אוסף מותאם אישית11מערכת טיפוסים וטיפול בשגיאות
הצהרות טיפוסיםטיפוסים שניתנים להכלה של nullטיפוסי איחוד וחיתוךמחלקות חריגההיררכיית חריגות מותאמת אישיתTry, Catch, Finallyסיכום – מאמת טפסים3מאפייני מחלקה
מאפייני מופע לעומת מאפיינים סטטייםקבועים במחלקותמתודות ומאפיינים סטטייםמאפיינים פרטיים ומוגניםמאפיינים לקריאה בלבד (PHP 8.1)סיכום – מנהל חשבון בנק6פולימורפיזם
בחינה מחדש של דריסת מתודותפולימורפיזם באמצעות ממשקיםרמזי טיפוסים וטיפוסי איחודקישור סטטי מאוחרסיכום — מעבד תשלומיםתרגלו בעצמכם: קומפיילר PHP אונליין