Laravel para iniciantes
- Parte 01: Como iniciar o projeto Laravel, criando views e rotas.
- Parte 02: Como configurar banco MySQL e manipular registros.
- Parte 03: Criando Controller e entendendo a injeção de dependência
- Parte 04: Como validar dados com FormRequest
- Parte 05: Como relacionar models com o Eloquent ORM, criar migrations e seeds.
- Parte 06: Criando camada de autenticação para visualizar as mensagens.
- Parte 07: Refatorando a view com @extends, @yield e @section
Esta é a quarta parte do tutorial “Criando um formulário de contato”. No post anterior, organizamos nossa aplicação com um Controller e vimos um pouco de injeção de dependência.
Nesse post vamos ver como validar os dados que o usuário envia ao submeter o formulário.
Passo 01: Crie uma classe de validação
Abra o terminal e execute a seguinte linha de comando:
1 |
php artisan make:request ContatoEnviarRequest |
Este comando cria uma classe chamada ContatoEnviarRequest dentro de app/Http/Request
Passo 02: Editando o ContatoEnviarRequest
Edite a classe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php namespace App\Http\Requests; use App\Http\Requests\Request; class ContatoEnviarRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'nome' => 'required', 'email' => 'required', 'mensagem' => 'required', ]; } } |
Aqui estamos apenas definindo quais campos são obrigatórios na requisição. Podemos adicionar neste array quantas regras forem necessárias. A lista de regras pode ser encontrada na documentação oficial:
http://laravel.com/docs/5.1/validation#available-validation-rules
Passo 03: Injetando a classe que criamos no método enviar
Agora basta fazermos uma troca. Ao invés de injetar o Request , vamos injetar o ContatoEnviarRequest . Como ela estende a request, não teremos problemas.
O ContatoController ficará assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php namespace App\Http\Controllers; use App\Http\Requests\ContatoEnviarRequest; use App\Http\Controllers\Controller; use App\Contato; use App\NotificacaoInterface; class ContatoController extends Controller { /** * Exibe o formulário para enviar uma mensagem */ public function index(){ return view('welcome'); } /** * Insere a mensagem no banco de dados */ public function enviar(ContatoEnviarRequest $request, Contato $contato, NotificacaoInterface $notificar){ $contato->nome = $request->get('nome'); $contato->email = $request->get('email'); $contato->mensagem = $request->get('mensagem'); $contato->save(); //Notificando.. $notificar->notificar(); echo "Sua mensagem foi armazenada com sucesso! Código: " . $contato->id; } /** * Exibe uma lista com as mensagens cadastradas */ public function lista(){ return view('lista', array('contatos' => Contato::all())); } } |
Passo 04: Exibir mensagens de erro
Ao injetar o ContatoEnviarRequest no método enviar, o laravel vai buscar os campos que deveriam existir na requisição (utilizando o método rules() ) e efetuar a verificação. Se a validação não passar, ele salva na sessão detalhes do erro e retorna um HTTP 302 redirecionando para a origem da requisição.
Acesse a aplicação e faça o teste:
Mas… Onde estão as mensagens?
Como disse, o laravel salva elas em uma sessão e disponibiliza dentro da variável $error que pode ser acessada na view. Vamos aditar a view resources/views/welcome.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<!DOCTYPE html> <html> <head> <title>ContactMe</title> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"> </head> <body> <div class="container"> <h1>ContactMe</h1> <hr /> @if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="/enviar" method="POST"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <div class="form-group"> <label for="nome">Nome</label> <input type="text" id="nome" name="nome" class="form-control" placeholder="Nome"> </div> <div class="form-group"> <label for="email">E-Mail</label> <input type="text" id="email" name="email" class="form-control" placeholder="E-Mail"> </div> <div class="form-group"> <textarea id="mensagem" name="mensagem" class="form-control" placeholder="Digite sua mensagem"></textarea> </div> <button type="submit" class="btn btn-default">Enviar</button> </form> </div> </body> </html> |
Obs: A variável $erros é uma instancia da classe ViewErrorBag.
Teste no navegador:
Obs: Você pode customizar a mensagem de erro. Dê uma olhada na documentação:
http://laravel.com/docs/5.1/validation#custom-error-messages
Dúvidas? Fique a vontade nos comentários!
Pingback: Laravel para Iniciantes: Tutorial "ContactMe"- Parte 02()
Pingback: Laravel para Iniciantes: Tutorial "ContactMe"- Parte 01()