Tutorial Laravel para iniciantes - Parte 05 [Validar formulário com FormRequest]

Nesse post iremos aprender como validar os dados enviados pelos usuários em formulários de sua aplicação


Glossário:


1) Criando a classe de validação

Abra o terminal na raiz do seu projeto e rode o seguinte comando:
php artisan make:request ContatoEnviarRequest
Com isso iremos criar a classe ContatoEnviarRequest dentro de app/Http/Requests:
Retorno do comando artisan make:request

2) Adicionando regras na classe ContatoEnviarRequest

Agora vamos editar a classe ContatoEnviarRequest:
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ContatoEnviarRequest extends FormRequest
{
    /**
     * 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 basicamente estamos definindo que os campos, nome, e-mail, mensagem são obrigatórios, também podemos adicionar a esse array quantas validações acharmos necessárias e para isso temos a documentação:
https://laravel.com/docs/5.4/validation#available-validation-rules

3) Injetando a nossa classe no método enviar

Para isso basta trocarmos a classe Request pela nossa classe ContatoEnviarRequest, como ela já uma extensão da classe Request não iremos ter nenhum problema:
namespace App\Http\Controllers;

use App\Http\Requests\ContatoEnviarRequest;
use Illuminate\Http\Request;
use App\Contato;

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, \App\NotificacaoInterface $notificar){
  $contato->nome = $request->get('nome');
  $contato->email = $request->get('email');
  $contato->mensagem = $request->get('mensagem');
  $contato->save();
  echo "Sua mensagem foi armazenada com sucesso! Código: " . $contato->id; 
  $notificar->notificar();
 } 

 /**
 * Exibe uma listar com as mensagens cadastradas 
 */ 
 public function listar(){
  return view('listar', array('contatos' => Contato::all()));
 }
}
Nossa aplicação já está validando os dados mas como exibir as mensagens de erro?

4) Exibindo as mensagens de erro

Ao injetar a classe ContatoEnviarRequest no método enviar(); o Laravel irá validar os campos que deveriam ser respeitados no formulários através do método rules(); se a validação falhar é salvo na sessão os detalhes do erro e a aplicação retorna um HTTP 302 (Movido Temporariamente)

Agora vamos testar o nosso formulário, preencha ele e deixe de escrever algum campo e veja o que acontece.
Se você está se perguntando porque não aconteceu nada e retornou para o formulário isso é uma ótima noticia, pois a validação está funcionando, então onde estão as mensagens de erro?

Como sabemos o Laravel salva as mensagens de erro na sessão e está disponível dentro da variável $error, e podemos acessa-la dentro de nossas view(); então para vermos as nossas mensagens de erro vamos editar a nossa view! Vamos editar a view localizada em: resources/views/welcome.blade.php. Nesse código acima adicionamos as notificações de erro. Agora sim vamos testar nosso formulário e ver o resultado das nossas validações:
Nesse exemplo eu não preenchi nenhum campo.
Como podemos ver nossas validações estão funcionando, porém não gostei muito de ver as mensagens padrões, então vamos criar as nossas! 

5) Mensagens personalizadas

Podemos criar mensagens personalizadas de várias maneiras, criando toda uma biblioteca de erros ou criando mensagens personalizadas diretamente nas regras de validação, para o nosso exemplo vamos criar as mensagens personalizadas diretamente em nossas regras.
Para isso adicione o método messages() abaixo de rules(); nesse nosso exemplo iremos validar se o campo foi preenchido e também se o campo está respeitando a regra de 6 caracteres e se o campo e-mail realmente é um e-mail:
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class ContatoEnviarRequest extends FormRequest
{
    /**
     * 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|min:6', 
            'email' => 'required|email', 
            'mensagem' => 'required',
        ];
    }

    public function messages()
    {
        // mensagens de erro personalizadas!
        return [
            'nome.required' => 'O campo :attribute é obrigatório',
            'nome.min' => 'O campo tem que ter mais do que 6 caracteres ',
            'email.required' => 'O campo :attribute é obrigatório',
            'email.email' => 'O campo :attribute tem que ser um email',
            'mensagem.required' => 'O campo :attribute é obrigatório',
        ];
    }
} 
Como podemos ver, adicionamos as mensagens personalizadas e também adicionamos outros meios de validação do formulário, de forma muito simples e intuitiva!

O atribulo :attribute retorna o nome do atributo, com isso se torna bem mais fácil o copiar e colar das mensagens padrões de erro na maioria dos casos.

Para saber mais sobre as validações e mensagens personalizadas:
https://laravel.com/docs/5.4/validation#custom-error-messages
https://laravel.com/docs/5.4/validation#available-validation-rules

Conclusão

Nesse post aprendemos como validar formulários, exibir essas mensagens de erro e também como personalizar as mensagens e como adicionar mais validações em nossas regras!
Já estou ficando ansioso para o nosso próximo post!


Se vocês gostaram desse Post não deixe de compartilhar com seus amigos!!!
E para não perder nenhuma novidade nos sigam nas redes sociais:
Twitter: @Bulfaitelo
Share on Google Plus

About Thiago Rodrigues

Formado em Sistema de Informação pela Faculdade Paraíso
O que falar de mim? Não á muito, mas garanto que meu objetivo aqui é somente ajudar!
Atualmente desenvolvendo o projeto do QiEstudo.

Comentários
0 Comentários

0 comentários:

Postar um comentário