복습 - 폼 검증기
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 69번째.
챌린지
쉬움첫 번째 문제에서 멈추는 대신 유효성 검사 오류를 수집하고 한 번에 모두 보고하는 사용자 등록 양식 유효성 검사기를 만들어 보겠습니다. 이것이 실제 환경에서 양식 유효성 검사가 작동하는 방식입니다. 사용자는 제출한 내용의 모든 문제를 확인하고, 한 번에 하나씩 수정하기를 원하지 않습니다.
코드를 네 개의 파일로 구성합니다:
ValidationException.php:Exception을 확장하는 기본ValidationExceptionclass를 Create합니다. 이 class는 유효성 검사와 관련된 모든 예외의 부모 역할을 합니다.Exceptions.php: ValidationException 파일을 포함하고ValidationException을 확장하는 세 가지 구체적인 예외 class를 Create합니다:RequiredFieldException: constructor에서 field 이름을 Accepts하고"[fieldName] is required"메시지를 부모에게 전달합니다.InvalidEmailException: constructor에서 email 문자열을 Accepts하고"'[email]' is not a valid email"메시지를 부모에게 전달합니다.MinLengthException: constructor에서 field 이름과 최소 길이(int)를 Accepts하고"[fieldName] must be at least [minLength] characters"메시지를 부모에게 전달합니다.
FormValidator.php: Exceptions 파일을 포함하고 다음 유효성 검사 메서드를 갖는FormValidatorclass를 Create합니다:validateRequired(?string $value, string $fieldName): string: 값이 null이거나 비어 있으면(trim 후)RequiredFieldException을 발생시키고, 그렇지 않으면 trim된 값을 반환합니다.validateEmail(string $email): string: email이 유효하지 않으면InvalidEmailException을 발생시킵니다(FILTER_VALIDATE_EMAIL과 함께filter_var를 사용). 그렇지 않으면 email을 반환합니다.validateMinLength(string $value, string $fieldName, int $minLength): string: 문자열 길이가 최소 길이보다 less하면MinLengthException을 발생시키고, 그렇지 않으면 값을 반환합니다.
main.php: FormValidator 파일을 포함합니다. username, email, password라는 세 가지 inputs를 받습니다.FormValidator와 오류 메시지를 collect할 empty array를 Create합니다. 각 field를 별도의 try-catch block에서 검증합니다:- username을 required로 검증합니다.
- email을 먼저 required로 검증한 다음, 유효한 email format인지 검증합니다.
- password를 먼저 required로 검증한 다음, 최소 8 characters인지 검증합니다.
ValidationException을 catch할 때 실행을 중단하는 대신 해당 메시지를 errors array에 추가합니다.모든 유효성 검사가 끝난 후 errors가 있으면 각 오류 메시지를 자체 line에 print합니다. errors가 없으면
"Registration successful"을 print합니다.
모든 오류를 보고하기 전에 collect하는 이 pattern은 좋은 사용자 경험을 위해 essential합니다. exception hierarchy를 사용하면 단일 catch block으로 모든 유효성 검사 문제를 쉽게 catch하면서도 서로 다른 유효성 검사 실패에 대해 specific exception types를 유지할 수 있습니다.
직접 해보기
<?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 블록에서 username을 필수로 검증
// ValidationException을 잡고 그 메시지를 $errors 배열에 추가
// TODO: 먼저 email을 필수로 검증한 다음, 유효한 이메일 형식으로 검증
// try-catch 블록을 사용하고 오류 메시지를 $errors 배열에 추가
// TODO: 먼저 password를 필수로 검증한 다음, 최소 길이 8자로 검증
// try-catch 블록을 사용하고 오류 메시지를 $errors 배열에 추가
// TODO: 모든 검증 후:
// - 오류가 있으면 각 오류 메시지를 한 줄에 출력
// - If there are no errors, print "Registration successful"
?>객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러