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.