Menu
Coddy logo textTech

Recapitulação - Validador de Formulário

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 69 de 91.

challenge icon

Desafio

Fácil

Vamos criar um validador de formulário de cadastro de usuário que coleta os erros de validação e os relata todos de uma vez, em vez de parar no primeiro problema. É assim que a validação de formulários funciona no mundo real: os usuários querem ver todos os problemas do envio, não corrigi-los um de cada vez.

Você organizará seu código em quatro arquivos:

  • ValidationException.php: crie uma classe base ValidationException que estende Exception. Ela serve como classe pai para todas as exceções relacionadas à validação.
  • Exceptions.php: inclua o arquivo ValidationException e crie três classes de exceção específicas que estendem ValidationException:
    • RequiredFieldException: aceita um nome de campo em seu construtor e passa a mensagem "[fieldName] is required" para a classe pai
    • InvalidEmailException: aceita uma string de e-mail em seu construtor e passa a mensagem "'[email]' is not a valid email" para a classe pai
    • MinLengthException: aceita um nome de campo e um comprimento mínimo (int) em seu construtor e passa a mensagem "[fieldName] must be at least [minLength] characters" para a classe pai
  • FormValidator.php: inclua o arquivo Exceptions e crie uma classe FormValidator com estes métodos de validação:
    • validateRequired(?string $value, string $fieldName): string: lança RequiredFieldException se o valor for nulo ou vazio (após remover os espaços em branco); caso contrário, retorna o valor sem os espaços em branco
    • validateEmail(string $email): string: lança InvalidEmailException se o e-mail for inválido (use filter_var com FILTER_VALIDATE_EMAIL); caso contrário, retorna o e-mail
    • validateMinLength(string $value, string $fieldName, int $minLength): string: lança MinLengthException se o comprimento da string for menor que o mínimo; caso contrário, retorna o valor
  • main.php: inclua o arquivo FormValidator. Você receberá três entradas: um nome de usuário, um e-mail e uma senha.

    Crie um FormValidator e um array vazio para coletar as mensagens de erro. Valide cada campo em um bloco try-catch separado:

    • Valide o nome de usuário como obrigatório
    • Valide primeiro o e-mail como obrigatório e, em seguida, valide-o quanto ao formato de e-mail válido
    • Valide primeiro a senha como obrigatória e, em seguida, valide se ela tem um comprimento mínimo de 8 caracteres

    Ao capturar uma ValidationException, adicione a mensagem dela ao seu array de erros em vez de interromper a execução.

    Após todas as validações, se houver erros, imprima cada mensagem de erro em sua própria linha. Se não houver erros, imprima "Registration successful".

Esse padrão de coletar todos os erros antes de relatá-los é essencial para uma boa experiência do usuário. Sua hierarquia de exceções facilita a captura de todos os problemas de validação com um único bloco catch, mantendo ainda tipos de exceção específicos para diferentes falhas de validação.

Experimente você mesmo

<?php
require_once 'FormValidator.php';

// Ler entradas
$username = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$password = trim(fgets(STDIN));

// Criar uma instância de FormValidator
$validator = new FormValidator();

// Criar um array vazio para coletar mensagens de erro
$errors = [];

// TODO: Validar username como obrigatório em um bloco try-catch
// Capturar ValidationException e adicionar sua mensagem ao array $errors

// TODO: Validar email como obrigatório primeiro, depois validá-lo como um formato de email válido
// Usar um bloco try-catch e adicionar quaisquer mensagens de erro ao array $errors

// TODO: Validar password como obrigatório primeiro, depois validar comprimento mínimo de 8 caracteres
// Usar um bloco try-catch e adicionar quaisquer mensagens de erro ao array $errors

// TODO: Após todas as validações:
// - Se houver erros, imprimir cada mensagem de erro em sua própria linha
// - If there are no errors, print "Registration successful"

?>

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de PHP online