Laravel Validation

Laravel
Tempo de leitura: 4 minutos

Laravel Validation: A Validação de Dados é uma etapa crítica e obrigatória no ciclo de vida de uma requisição HTTP. No Laravel 12, a validação é simples, fluente e extremamente robusta. Ela garante que os dados de entrada dos usuários (formulários, APIs) atendam aos requisitos definidos, protegendo a aplicação contra dados maliciosos ou inconsistentes.

Este artigo detalha o sistema de Validação do Laravel, focando nas regras, Form Requests e personalização de mensagens.

1. 🛡️ Por Que Validar no Servidor?

A validação não deve depender apenas do front-end (HTML5 ou JavaScript). A validação no lado do servidor é a única garantia de Segurança e Integridade dos Dados.

  • Segurança: Impede ataques como Injeção de SQL ou XSS (Cross-Site Scripting) ao garantir que os dados estejam no formato esperado.
  • Integridade: Assegura que os dados inseridos no banco de dados sejam consistentes (ex: e-mails válidos, campos obrigatórios preenchidos, unicidade garantida).

2. 📝 Validação Rápida no Controller

A forma mais direta de validar dados de uma requisição é utilizando o método validate() disponível no objeto Illuminate\Http\Request injetado no seu Controller.

Exemplo de Validação Direta

PHP

use Illuminate\Http\Request;

public function store(Request $request)
{
    // Se a validação falhar, o Laravel lança uma exceção,
    // interrompe a execução e redireciona automaticamente o usuário.
    $validatedData = $request->validate([
        'name' => 'required|min:3',
        'email' => 'required|email|unique:users', // Único na tabela 'users'
        'password' => 'required|min:8|confirmed', // 'confirmed' exige o campo 'password_confirmation'
    ]);
    
    // O código só é executado se a validação for bem-sucedida.
    // $validatedData contém apenas os campos validados (limpo).

    // ... lógica de negócio e redirecionamento ...
    return redirect()->route('login');
}

3. 📄 Form Requests: Organização da Lógica

Para rotas mais complexas ou para manter seus Controllers limpos (Single Responsibility Principle), use classes dedicadas de Form Request. Elas encapsulam as regras de validação e a lógica de autorização.

A. Criando e Definindo Regras

  1. Gere a classe:
    Bash
    php artisan make:request StoreUserRequest
  2. Edite as regras e a autorização:

PHP

// app/Http/Requests/StoreUserRequest.php

use Illuminate\Foundation\Http\FormRequest; 

class StoreUserRequest extends FormRequest { 
    public function authorize(): bool {                 
        // Define a lógica de permissão (ex: Se o usuário está logado) 
        // Altere para a lógica desejada (ex: auth()->check()) 
        return true; 
    } 

    public function rules(): array { 
        return [ 
            'name' => 'required|min:3', 
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8' 
        ]; 
    } 
}

B. Injeção no Controller

O Laravel é inteligente: se você injetar o Form Request no método do Controller, a validação e a autorização ocorrerão automaticamente antes que o método seja chamado.

PHP

// No Controller
public function store(StoreUserRequest $request)
{    
    // Se chegou aqui, os dados são válidos.
    // ...salva usuário no banco de dados...
    return redirect()->route('login');
}

4. ✍️ Customização de Mensagens e Views

A. Mensagens de Erro Personalizadas (Inline)

Você pode passar um array de mensagens personalizadas como segundo argumento para o método validate().

PHP

$messages = [
    'name.required' => 'Por favor, preencha o campo :attribute.', // :attribute é um placeholder
    'email.unique' => 'Este e-mail já foi cadastrado no sistema.',
];

$request->validate([ /* regras */ ], $messages);

B. Exibindo Erros no Blade

Em caso de falha, o Laravel retorna automaticamente o usuário com os erros na variável global $errors.

HTML

@if ($errors->any())
    <div class="alert alert-danger">
        <strong>Opa!</strong> Houve um erro nos dados:
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

@error('email')
    <div class="text-danger">{{ $message }}</div>
@enderror

<input type="email" name="email" value="{{ old('email') }}">

5. 🌟 Regras de Validação Customizadas

Para lógica de validação que não existe nas regras padrão (ex: CPF, CNPJ, ou datas específicas), você pode criar suas próprias regras.

Exemplo: Regra Customizada via Validator::extend

Você pode usar o método Validator::extend para registrar uma nova regra customizada com o Laravel.

PHP

use Illuminate\Support\Facades\Validator;

// Idealmente, isto deve ser feito em um Service Provider (ex: AppServiceProvider::boot)
Validator::extend('cpf', function ($attribute, $value, $parameters, $validator) {
    // Exemplo: Implementação complexa de validação de CPF (requer lógica externa)
    // Supondo que você tenha a lógica em uma classe utilitária:
    return \App\Utils\CpfHelper::isValid($value);
});

// Mensagem de erro para a regra 'cpf'
Validator::replacer('cpf', function ($message, $attribute, $rule, $parameters) {
    return "O campo :attribute contém um número de CPF inválido.";
});

Depois de registrado, use a regra no seu Controller ou Form Request:

PHP

$request->validate(['cpf' => 'required|cpf']);

✅ Conclusão Laravel Validation

Laravel Validation: O sistema de validação do Laravel é uma das suas ferramentas mais essenciais, garantindo a segurança e a integridade dos dados. A preferência é usar Form Requests para encapsular regras e autorização, mantendo os Controllers limpos. Com uma vasta biblioteca de regras built-in e a capacidade de criar regras customizadas, o Laravel oferece controle total sobre a qualidade dos dados que entram na sua aplicação.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.