Em todo processo para construção de páginas web é necessário informar o usuário sobre suas ações, seja um formulário de cadastro inválido ou uma compra efetivada. No Laravel podemos usar diferentes recursos para enviar informações aos arquivos .blade.
Vamos ver nesse artigo como usar as Flash Sessions, que basicamente armazena as informações em uma sessão e destrói elas após serem consumidas. O processo é simples e fácil, então vamos a prática.
Tudo o que a gente precisa fazer é usar o método with da classe redirect, como mostra o exemplo abaixo.
return redirect('/sessao')->with('sucesso', 'Cadastrado com sucesso');
Note que estamos acessando uma URL /sessao, para ela enviamos uma chave chamada “sucesso” com o valor “Cadastrado com sucesso”. Na rota /sessao, temos uma visão que espera pela sessão “sucesso”.
@if (session('sucesso'))
div>
<h2>{{ session('sucesso') }}</h2>
</div>
@endif
No exemplo acima temos um if no arquivo blade, é importante sempre verificar se a sessão existe, para isso usamos o método session passando o nome criado no primeiro exemplo, que nesse caso se chama “sucesso”.
Vamos agora construír um exemplo funcional, para isso, vamos criar uma pasta chamada sessao dentro de resources\views e inserir o código a seguir.
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Flash session - SatellaSoft</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>
<body>
<div class="m-5">
<a href="http://127.0.0.1:8000/sessao/sucesso" class="btn btn-success">Sucesso</a>
<a href="http://127.0.0.1:8000/sessao/erro" class="btn btn-danger">Erro</a>
</div>
<div class="m-5">
@if (session('sucesso'))
<div class="alert alert-success">
<h2>{{ session('sucesso') }}</h2>
</div>
@endif
</div>
<div class="m-5">
@if (session('erro'))
<div class="alert alert-danger">
<h2>{{ session('erro.msg_principal') }}</h2>
<ul>
@foreach (session('erro.erros') as $erro)
<li>{{ $erro }}</li>
@endforeach
</ul>
</div>
@endif
</div>
</body>
</html>
Agora vamos criar nossas rotas e entender o que cada um desses arquivos estão fazendo.
Route::prefix('sessao')->group(function () {
Route::get('/', function () {
return view('sessao.index');
});
Route::get('/sucesso', function () {
return redirect('/sessao')->with('sucesso', 'Cadastrado com sucesso');
});
Route::get('/erro', function () {
return redirect('/sessao')->with('erro', [
'msg_principal' => 'Formulário inválido',
'erros' => [
'Nome inválido',
'E-mail inválido',
'Selecione um estado'
]
]);
});
});
Agora podemos acessar cada rota da seguinte forma:
- Sucesso - http://127.0.0.1:8000/sessao/sucesso
- Erro - http://127.0.0.1:8000/sessao/erro
Começamos a entender as rotas, quando acessamos sessao/sucesso, nossa aplicação nos redireciona para /sessao criando uma flash session com o valor definido. Porém quando acessamos sessao/erro, outro redirect acontece, mas dessa vez enviamos um array associativo.
Agora no arquivo .blade, nós verificamos se existe uma sessão, se sim, exibimos as mensagens e percorremos o array em caso de erro.
Finalizamos aqui mais um artigo prático, vimos como exibir uma simples mensagem de cadastro como também enviar um array com várias outras informações.