LGPD em prática: como sua empresa pode evitar multas e proteger dados
LGPD em prática: como sua empresa pode evitar multas e proteger dados

Laravel Form Request: Validação de Dados de Forma Simples, Segura e Escalável

Se você desenvolve com Laravel, provavelmente já se deparou com aquela parte do código onde precisa validar os dados de um formulário. Seja para cadastro de usuários, atualização de produtos ou envio de mensagens, garantir que os dados estejam corretos e seguros antes de chegar ao banco de dados é fundamental.

Neste guia completo, vamos explorar em profundidade tudo o que você precisa saber sobre Laravel Form Request, uma das ferramentas mais poderosas do framework para validação de dados. Aqui você vai entender o que é, por que usar, como implementar, como personalizar mensagens de erro e boas práticas que evitam dores de cabeça no futuro. Tudo com uma linguagem clara, prática e acessível, ideal para quem está começando ou quer se aprofundar no assunto.


O que é Laravel Form Request?

O Laravel Form Request é uma classe especial que encapsula a lógica de validação de um formulário ou requisição HTTP. Em vez de escrever a validação diretamente no controller, você pode criar uma classe separada dedicada apenas à validação, tornando seu código mais organizado, limpo e reutilizável.

Essa classe herda de Illuminate\Foundation\Http\FormRequest, que por sua vez oferece recursos como:

  • Validação automática antes de o controller ser executado;
  • Autorização de usuários para realizar ações específicas;
  • Mensagens de erro personalizadas;
  • Reutilização de regras em diferentes partes da aplicação.

Por que usar Form Request no Laravel?

Quando se começa com Laravel, é comum ver a validação sendo feita assim:

$request->validate([
    'nome' => 'required|string|min:3',
    'email' => 'required|email|unique:users',
    'senha' => 'required|min:6',
]);

Embora funcional, esse método rapidamente se torna limitado:

  • Fica verboso em controllers com muitas regras;
  • Dificulta a reutilização de validações complexas;
  • Mistura responsabilidades — o controller fica encarregado tanto da lógica de negócios quanto da validação;
  • Torna mais difícil aplicar testes unitários à validação.

Já com o uso de Form Requests, cada responsabilidade tem seu lugar. Isso significa:

  • Separação de responsabilidades (SRP);
  • Código mais limpo e fácil de testar;
  • Mensagens de erro personalizáveis e organizadas;
  • Possibilidade de aplicar lógica condicional na autorização e validação.

Como criar uma Form Request no Laravel

Você pode gerar uma classe de Form Request com o Artisan, o CLI do Laravel:

php artisan make:request CadastroUsuarioRequest

Isso cria uma classe em app/Http/Requests/ com a seguinte estrutura básica:

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class CadastroUsuarioRequest extends FormRequest
{
    public function authorize(): bool
    {
        return true;
    }

    public function rules(): array
    {
        return [
            'nome' => 'required|string|min:3',
            'email' => 'required|email|unique:users',
            'senha' => 'required|min:6',
        ];
    }
}

Para usar essa request em um controller, basta substituir o Request padrão:

use App\Http\Requests\CadastroUsuarioRequest;

public function store(CadastroUsuarioRequest $request)
{
    // A validação já aconteceu antes de chegar aqui
    $dadosValidados = $request->validated();

    // Lógica de criação de usuário
}

Entendendo o método authorize

Esse método define se o usuário atual está autorizado a fazer a requisição. Por padrão ele retorna true, mas pode ser usado para lógica condicional de permissões:

public function authorize(): bool
{
    return auth()->user()->isAdmin();
}

Se retornar false, o Laravel responde com erro 403 Forbidden.


Personalizando mensagens de erro

Você pode criar mensagens de erro personalizadas usando o método messages():

public function messages(): array
{
    return [
        'nome.required' => 'O nome é obrigatório.',
        'email.unique' => 'Este e-mail já está em uso.',
        'senha.min' => 'A senha deve ter no mínimo 6 caracteres.',
    ];
}

Também é possível usar o método attributes() para traduzir os nomes dos campos:

public function attributes(): array
{
    return [
        'nome' => 'Nome completo',
        'senha' => 'Senha de acesso',
    ];
}

Trabalhando com validações condicionais

Quer validar um campo somente se outro tiver determinado valor? Você pode fazer isso sobrescrevendo o método rules() com lógica condicional:

public function rules(): array
{
    $rules = [
        'tipo' => 'required|in:individual,empresa',
    ];

    if ($this->tipo === 'empresa') {
        $rules['cnpj'] = 'required|cnpj';
    }

    return $rules;
}

Validando arrays e coleções de dados

Laravel Form Request também lida bem com validações em massa:

public function rules(): array
{
    return [
        'produtos' => 'required|array|min:1',
        'produtos.*.id' => 'required|integer|exists:produtos,id',
        'produtos.*.quantidade' => 'required|integer|min:1',
    ];
}

Esse tipo de validação é muito útil em APIs, especialmente quando estamos lidando com múltiplos registros de uma vez só.


Reutilizando regras de validação

Você pode centralizar regras de validação para usá-las em diferentes requests. Uma maneira elegante de fazer isso é com Rule Objects ou métodos reutilizáveis:

public static function regrasPadrao(): array
{
    return [
        'nome' => 'required|string|max:255',
        'email' => 'required|email|unique:users,email',
    ];
}

E dentro da sua FormRequest, chame esse método:

public function rules(): array
{
    return self::regrasPadrao();
}

Tratando erros de validação em APIs

Quando uma validação falha, Laravel retorna automaticamente uma resposta 422 Unprocessable Entity com os erros em JSON. Isso é perfeito para aplicações SPA ou APIs RESTful.

Se precisar customizar a resposta, você pode sobrescrever o método failedValidation:

protected function failedValidation(Validator $validator)
{
    throw new HttpResponseException(response()->json([
        'mensagem' => 'Erro de validação',
        'erros' => $validator->errors(),
    ], 422));
}

Integrando com testes automatizados

Usar Form Request facilita a criação de testes unitários para suas validações. Com o método validated(), você pode testar apenas a lógica de negócio sem se preocupar com dados inválidos.

Além disso, o Laravel permite testar a própria Form Request isoladamente:

public function test_validacao_cadastro_usuario()
{
    $request = new CadastroUsuarioRequest();

    $request->merge([
        'nome' => '',
        'email' => 'invalido',
        'senha' => '123',
    ]);

    $this->expectException(ValidationException::class);
    $request->validateResolved();
}

Dicas e boas práticas com Form Request

  • Nunca valide dados no controller quando você já possui um Form Request dedicado. Mantenha o controller limpo.
  • Separe regras complexas em métodos privados dentro da própria request para facilitar leitura.
  • Use regras customizadas (Rule::when) para cenários com dependência entre campos.
  • Organize suas requests por domínio — por exemplo, Requests/Usuario/, Requests/Produto/, para melhorar a arquitetura.
  • Documente sua request com comentários — principalmente se houver lógica condicional.

Palavras-chave importantes relacionadas a Laravel Form Request

Durante sua busca por mais conhecimento, você pode se deparar com termos como:

  • Laravel request validation
  • Validação de formulário Laravel
  • Form Request personalizada Laravel
  • Laravel request rules
  • Regras condicionais Laravel
  • Form Request messages
  • Laravel API validation

Esses termos são valiosos para aprofundar sua pesquisa e encontrar conteúdos complementares.


Conclusão

Laravel Form Request é uma das ferramentas mais elegantes e poderosas do Laravel para lidar com validações de dados. Ele melhora a legibilidade do código, aumenta a reutilização de regras, facilita a manutenção da aplicação e fortalece a segurança dos dados.

Com esse recurso bem aplicado, você elimina a repetição de código, reduz erros de validação, melhora a resposta das APIs e cria um ambiente mais confiável para o seu projeto crescer.

Se você ainda não usa Form Request, este é o momento ideal para aplicar no seu próximo projeto — e perceber rapidamente o impacto positivo que isso terá no seu fluxo de desenvolvimento.

🔥 Construa seus projetos com a melhor infraestrutura e ainda apoie o DevsBrasil!

Na Hostinger, você encontra hospedagem rápida, segura e com suporte top de linha — ideal para desenvolvedores e empreendedores digitais.

💡 Use o nosso link exclusivo do DevsBrasil e garanta:

✅ Descontos especiais nos planos de hospedagem, e-mail profissional, VPS e criador de sites com IA

✅ Ferramentas otimizadas para performance, com ótimo custo-benefício

✅ Apoio direto à nossa comunidade e ao nosso conteúdo gratuito 💚

👉 Acesse agora com nosso link exclusivo e aproveite os benefícios!

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *