Validar formulários é um papel muito importante para aplicações web, através delas conseguimos cadastrar informações corretas no banco de dados, por exemplo. Um erro comum dos iniciantes é incluir validações apenas no front e esquecer do back.
O Laravel contém um método na qual podemos informar os nomes do campos e especificar qual o nível de validação, como, por exemplo, que um campo de e-mail deve ser preenchido e estar no formato correto.
Vamos iniciar nosso exemplo com as rotas abaixo.
Route::prefix('form')->group(function () {
Route::get('/', [FormController::class, 'index'])->name('form.index');
Route::post('insert', [FormController::class, 'insert'])->name('form.insert');
});
Vamos criar agora nosso formulário, para isso, vamos inserir o código abaixo.
<div class="max-width">
<!--FORM INPUTS-->
<form action="{{ route('form.insert') }}" method="POST">
@csrf
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="text" class="form-control" id="email" name="email">
</div>
<div class="mb-3">
<label for="name" class="form-label">Nome</label>
<input type="text" class="form-control" id="name" name="name">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
Note que nosso código contém um formulário com o método do tipo post enviando para a nossa rota insert. Veja também que nós temos dois campos, um de e-mail e outro de nome.
Criaremos agora uma validação através do método validate da classe Request. Note no código abaixo, que estamos definindo no primeiro array, as chaves correspondentes aos nomes dos nossos campos no formulário.
public function insert(Request $request)
{
$request->validate(
[
'name' => 'required||max:255|min:5', //Requer o campo, ao menos 5 caracteres e no mácimo 255
'email' => 'required|email' //Requer o campo e deve ser um e-mail no formato correto
],
[
'name.required' => 'Digite um nome para continuar', //Criamos uma mensagem personalizada para quando o tipo required não for satisfeito
'email.required' => 'Digite um e-mail válido' //Criamos uma mensagem personalizada para quando o tipo required não for satisfeito
]
);
}
Perfeito, agora vamos mostrar as mensagens de erro para o usuário, para isso, vamos editar nosso blade para incluir o código abaixo.
<div class="max-width mt-5">
<!--FORM VALIDATE-->
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
</div>
Para testar é muito simples, submeta o formulário sem preencher nada e você verá uma mensagem como mostrada abaixo.
E assim finalizamos mais um artigo.
Form Validation: https://laravel.com/docs/8.x/validation