Skip to content

Laravel 9, flash messages, “Bags” e uma forma de alertar erros interessante…

Vamos analisar a parte de erros do Laravel 9 de forma simplificada?
No Laravel 9 a variável predefinida $errors é do tipo MessageBag e isso quer dizer que ela é uma "sacola contendo muitas informações". Essa "sacola" por sua vez é rica em alguns detalhes e prontamente pode nos entregar informações preciosas.
Imagine que na sua action store (inserção de dados) você precisa validar campos e torná-los obrigatórios e com tamanho mínimo, por exemplo:
  
 public function store(Request $request)
    {
        $request->validate([
            'nome' => ['required', 'min:3']
        ]);

Veja que no momento em que o input name="nome" vem vazio OU não possui tamanho mínimo de 3 caracteres o Laravel já torna o erro uma FLASH MESSAGE, isso quer dizer que teremos uma session temporaria de apenas 1 request que vai guardar a mensagem de erro para exibir para o usuário final esse erro. 

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Outro detalhe importante é que podemos alimentar o value do input name="nome" com o antigo valor para que o user saiba o que aconteceu, no seu componente do Blade você pode informar a função old do Blade que também vai trazer o "nome" que foi preservado no momento do $request->validate, a sintaxe abaixo eu explico rapidinho:

<x-layout title="Novo Produto">
    <x-produtos.form :action="route('produtos.store')" :nome="old('nome')" :update="false" />

Explicando a primeira linha, temos o componente chamado layout (Blade) que contém um template padrão e dentro dele estamos preenchendo o {{$slot}} com outro componente que está na pasta produtos/form.blade.php e estamos enviando parâmetros com o nome :action ($action), :nome ($nome) e :update ($update), e aí é que mora a magia, a função old() do Blade vai trazer o input name="nome" que foi preenchido pelo user antes do erro, assim, quando o $errors (MessageBag) for disparado o user vai ter os dados antigos enviados.
Lembrando que $errors preenche Flash Messages Automaticamente (sessões de "um tiro só" kkkkk, ok? Isso é bom para reportar usuários sobre o que houve de errado). 

One Comment

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.