Laravel Custom Request: Validando dados de forma organizada

Remova da controladora todas as regras e mensagens de validação para uma camada específica.

Publicado em

Sabemos que as controladoras são as partes mais complexas de uma aplicação, já que lidam com diversas regras de negócio, realizam validações, chamam os modelos, entre outras operações. Sempre que possível, utilize novas camadas para manter a controladora mais enxuta.

Quando se trata de validações, podemos usar as famosas Custom Requests do Laravel. Basicamente, elas criam uma nova camada chamada Requests dentro do namespace App\Http. Com esse recurso, podemos criar validações com mensagens para cada método ou validação da nossa aplicação, removendo, assim, essa responsabilidade da nossa controladora.

Para criar uma Custom Request, basta executar o comando Artisan abaixo.

php artisan make:request UserStoreRequest

Note que o nome UserStoreRequest é apenas uma convenção, sendo:

  • User - Referência a controladora;
  • Store - Referência ao método;
  • Request - Sufixo de convenção.

Agora imagine que seja necessário criar validações para o Insert, Update, Filter, dentre outros métodos. Podemos agrupar eles dentro de uma pasta além de utilizar a convenção abordada aqui, veja mais alguns exemplos abaixo.

php artisan make:request User/UserStoreRequest
php artisan make:request User/UserUpdateRequest
php artisan make:request User/UserFilterRequest

Validando dados no Laravel

Dentro da Custom Request, você verá um método chamado Rules que retorna um Array, é nele que você vai inserir as suas regras de negócio, como provavelmente fazia dentro da controladora.

Você pode ver todos os tipos de validação disponível em https://laravel.com/docs/10.x/validation#available-validation-rules.

public function rules(): array
{
        return [
            'nome'  => 'string|required',
            'idade' => 'integer|max:35'
        ];
}

Mensagens de validação no Laravel

Também é possível criar um método chamado messages que retorna um Array, esse método recebe as mensagens de validação em caso de falha, conforme mostra o método abaixo correspondente a validação criada anteriormente.

public function messages()
{
        return [
            'nome.required'  => 'O campo nome é obrigatório.',
            'nome.string'    => 'O campo nome deve ser uma string.',
            'idade.integer'  => 'O campo idade deve ser um número inteiro.',
            'idade.max'      => 'A idade não pode ser superior a 35 anos.',
        ];
}

Validação na Controladora

Até aqui você já deve ter notado que temos as regras e as mensagens, mas como utilizá-las na controladora? A resposta é bem simples, basta assinar o seu método com a classe da Request criada.

Observe no exemplo abaixo que estamos chamando a classe UserStoreRequest como parâmetro para o nosso método store. Observe também que através do método validated() é possível obter todos os campos que foram validados.

<?php

namespace App\Http\Controllers;

use App\Http\Requests\User\UserStoreRequest;

class UserController extends Controller
{
    public function store(UserStoreRequest $request)
    {
        $form = $request->validated();

        dd($form);
    }
}

Continue aprendendo com a nossa videoaula

Assista a videoaula que a gente preparou sobre esse tema, criando todas as validações e exemplificando ainda mais o que foi abordado até aqui.

 

Referências
Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção

Todos os nossos cursos em promoção

Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção