Validando Entradas no PHP de Forma Simples e Poderosa com Respect\Validation
A biblioteca Respect\Validation é uma poderosa ferramenta de validação de dados para PHP, amplamente reconhecida por sua simplicidade e flexibilidade. Ela oferece um conjunto abrangente de regras predefinidas que podem ser facilmente combinadas para atender a praticamente qualquer cenário de validação.
Principais Características:
- API fluida e legível: Utiliza uma sintaxe intuitiva, permitindo criar regras de validação de forma clara e elegante.
- Grande variedade de regras: Suporte a validações comuns como e-mail, números, strings, URLs, além de validações avançadas como CPF, CNPJ e IPs.
- Mensagens de erro personalizáveis: Oferece mensagens detalhadas por padrão, com a possibilidade de personalização.
- Extensibilidade: Permite a criação de regras personalizadas para atender a requisitos específicos.
- Integração com arrays e objetos: Valida facilmente estruturas complexas de dados.
Vantagens:
- Simplicidade: Fácil de usar, mesmo em projetos complexos.
- Flexibilidade: Adapta-se a diferentes cenários, de validações simples a requisitos empresariais avançados.
- Manutenção facilitada: Código limpo e regras centralizadas ajudam na manutenção e legibilidade.
- Comunidade ativa: Atualizações regulares e suporte da comunidade garantem confiabilidade.
A Respect\Validation é ideal para projetos que demandam validação robusta, ajudando a evitar problemas de segurança e integridade de dados, enquanto mantém o código limpo e organizado.
Instalação
Antes de usar, instale a biblioteca via Composer:
composer require respect/validation
Exemplos de Uso
1. Validação Básica
O exemplo abaixo valida se o valor é um e-mail válido:
use Respect\Validation\Validator as v;
$email = "exemplo@dominio.com";
if (v::email()->validate($email)) {
echo "Email válido!";
} else {
echo "Email inválido!";
}
2. Validando dados vindo do formulário:
Vamos validar os campos nome
, email
e idade
enviados por meio de um formulário HTML via método POST
.
Formulário HTML
<form method="post" action="">
<label for="nome">Nome:</label>
<input type="text" id="nome" name="nome" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<label for="idade">Idade:</label>
<input type="number" id="idade" name="idade" required>
<button type="submit">Enviar</button>
</form>
Validação no PHP
require 'vendor/autoload.php';
use Respect\Validation\Validator as v;
// Verificar se o formulário foi enviado
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Obter os dados do formulário
$data = [
'nome' => $_POST['nome'] ?? '',
'email' => $_POST['email'] ?? '',
'idade' => $_POST['idade'] ?? ''
];
// Definir as regras de validação
$validators = [
'nome' => v::stringType()->notEmpty()->length(3, 50),
'email' => v::email(),
'idade' => v::intVal()->between(18, 100)
];
$errors = [];
// Validar os dados
foreach ($validators as $field => $validator) {
try {
$validator->assert($data[$field]);
} catch (\Respect\Validation\Exceptions\ValidationException $e) {
$errors[$field] = $e->getMessages(); // Capturar mensagens de erro
}
}
// Exibir os resultados
if (empty($errors)) {
echo "Todos os dados são válidos!";
} else {
foreach ($errors as $field => $messages) {
echo "<strong>Erros no campo '$field':</strong><br>";
echo implode('<br>', $messages) . '<br><br>';
}
}
}
Explicação do Código
- Captura dos Dados: Os dados do formulário são capturados no array
$data
usando$_POST
. - Definição de Regras:
nome
: Deve ser uma string, não vazia, com comprimento entre 3 e 50 caracteres.email
: Deve ser um e-mail válido.idade
: Deve ser um número inteiro entre 18 e 100.
- Validação:
- A validação é feita campo a campo.
- Em caso de erro, as mensagens de validação são coletadas no array
$errors
.
- Resultados:
- Se não houver erros, uma mensagem de sucesso é exibida.
- Caso contrário, as mensagens de erro específicas são mostradas para cada campo.
Confira mais sobre essa biblioteca PHP incrível em: https://github.com/Respect/Validation
Documentação completa: https://respect-validation.readthedocs.io/en/2.3/