Nesse post iremos aprender como validar os dados enviados pelos usuários em formulários de sua aplicação
- Tutorial Laravel para iniciantes - Parte 01 [Instalação e configuração]
- Tutorial Laravel para iniciantes - Parte 02 [Primeiro Formulário e MVC]
- Tutorial Laravel para iniciantes - Parte 03 [Configuração e manipulação do MySQL]
- Tutorial Laravel para iniciantes - Parte 04 [Controller e Injeção de dependência]
- Tutorial Laravel para iniciantes - Parte 05 [Validar formulário com FormRequest]
- Tutorial Laravel para iniciantes - Parte 06 [Relacionando models com o Eloquent ORM, criando migrations e seeds]
- Tutorial Laravel para iniciantes - Parte 07 [Criando uma Camada de autenticação]
- Tutorial Laravel para iniciantes - Parte 08 [Entendendo view com @extends, @yield e @section]
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:
https://laravel.com/docs/5.4/validation#available-validation-rules
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. |
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
Facebook: Bulfaitelo Project
Blogger: Bulfaitelo Project