Menu
Coddy logo textTech

요약 - Form Validator

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 69번째.

challenge icon

챌린지

쉬움

첫 번째 문제에서 멈추지 않고 모든 유효성 검사 오류를 수집하여 한 번에 보고하는 사용자 등록 양식 유효성 검사기(validator)를 만들어 보겠습니다. 이것이 실제 양식 유효성 검사가 작동하는 방식입니다. 사용자는 제출 시 발생한 모든 문제를 한 번에 보기를 원하며, 하나씩 수정하는 것을 원하지 않습니다.

코드는 네 개의 파일로 구성됩니다:

  • ValidationException.phpException을 상속받는 기본 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_varFILTER_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"을 출력

?>

객체 지향 프로그래밍의 모든 레슨