요약 - Form Validator
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 69번째.
챌린지
쉬움첫 번째 문제에서 멈추지 않고 모든 유효성 검사 오류를 수집하여 한 번에 보고하는 사용자 등록 양식 유효성 검사기(validator)를 만들어 보겠습니다. 이것이 실제 양식 유효성 검사가 작동하는 방식입니다. 사용자는 제출 시 발생한 모든 문제를 한 번에 보기를 원하며, 하나씩 수정하는 것을 원하지 않습니다.
코드는 네 개의 파일로 구성됩니다:
ValidationException.php—Exception을 상속받는 기본ValidationException클래스를 생성합니다. 이 클래스는 모든 유효성 검사 관련 예외의 부모 역할을 합니다.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— 값이 null이거나 (공백 제거 후) 비어 있으면RequiredFieldException을 던지고, 그렇지 않으면 공백이 제거된 값을 반환합니다.validateEmail(string $email): string— 이메일 형식이 유효하지 않으면 (filter_var와FILTER_VALIDATE_EMAIL사용)InvalidEmailException을 던지고, 그렇지 않으면 이메일을 반환합니다.validateMinLength(string $value, string $fieldName, int $minLength): string— 문자열 길이가 최소 길이보다 작으면MinLengthException을 던지고, 그렇지 않으면 값을 반환합니다.
main.php— FormValidator 파일을 포함합니다. 사용자 이름(username), 이메일(email), 비밀번호(password)의 세 가지 입력을 받습니다.FormValidator객체와 오류 메시지를 수집할 빈 배열을 생성합니다. 각 필드를 별도의 try-catch 블록에서 검증합니다:- 사용자 이름이 필수인지 검증합니다.
- 이메일이 필수인지 먼저 검증한 다음, 유효한 이메일 형식인지 검증합니다.
- 비밀번호가 필수인지 먼저 검증한 다음, 최소 길이가 8자인지 검증합니다.
ValidationException을 catch할 때, 실행을 중단하는 대신 해당 메시지를 오류 배열에 추가합니다.모든 유효성 검사가 끝난 후, 오류가 있으면 각 오류 메시지를 개별 줄에 출력합니다. 오류가 없으면
"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"을 출력
?>객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션11타입 시스템과 에러 핸들링
타입 선언Nullable 타입유니온 및 인터섹션 타입예외 클래스커스텀 예외 계층 구조Try, Catch, Finally요약 - Form Validator