Laravel 5.7 e Validation Form

Laravel 5.7, Criando “form validations” ao seu projeto web

PHP

Antes de dar sequência a nossa série sobre o Laravel, gostaria de falar sobre o anúncio do Laravel 5.7, que saiu no fim deste mês de agosto. Nele, tivemos algumas alterações de estrutura de pastas, melhorias nas mensagens de erro, implementações de testes em comandos artisan entre outros. Em breve traremos um artigo com mais informações sobre este assunto.

Voltando à nossa série, finalizamos o último artigo falando sobre algumas implementações rápidas do Laravel Controller. Neste artigo vou focar na parte das validações de dados em formulários. Aproveitei também para atualizar tudo para o Laravel 5.7.

O que são as validações (validations) no Laravel 5.7

O Laravel utiliza de diversas regras para conseguir validar qualquer dado que está entrando em uma aplicação. Estas regras são essenciais para que tenhamos mais segurança, controle, estabilidade e melhor usabilidade para o usuário. 

Para isto ele utiliza, por padrão, da Classe “ValidateRequests”. Ela traz ao nosso controller métodos bem convenientes para validar requisições HTTP e retornar para o Controller o sucesso ou o erro, de acordo com a regra programada.

Criando a primeira validação em meu controller

Colocando a mão na massa, vamos abrir o meu projeto com o Laravel 5.7. Neste exemplo, vou utilizar o “ProductsController” para configurar as validações.

Caso você não tenha acompanhado nossa série, deixo o link para nosso artigo sobre Controllers no Laravel. Nele mostro sobre a criação deste controller.

Aqui, vou iniciar uma validação simples dos dados que salvo na função store(). Aqui existem 2 maneiras:

A primeira é mais simples e você pode incluir no próprio Controller com a função $request->validate();

Para a validação precisava instanciar a “Request” da função utilizando o type-hint. É através dela que farei a validação. A partir daí, apenas chamei a função validate() passando o array com todos os campos que eu vou validar e suas respectivas regras.

No caso, utilizei as regras básicas de campo requerido e o tipo de dado que eu quero que venha. No campo “price”, utilizei a regra de regex para  validar o valor monetário. Já que não encontrei nada pronto do Laravel, busquei na internet por um regex que fizesse isso por mim.

Caso queira saber todas as validações que o Laravel 5.7 permite, siga para o fim deste artigo.

Como podem ver abaixo, é um simples regex que valida a virgula dos centavos. Mas, para não ter problemas de compatibilidade com outra regra, o regex exige a utilização de um array ao invés da simples string de regras.

A segunda forma é usando o Form Request Validation

Ela é relativamente mais complexa, mas também deixa suas validações mais organizadas.

Aqui, criarei uma classe Request personalizada que terá estas mesmas regras. Para isto basta ir ao SSH do seu servidor. No caso, vou utilizar minha instância de hospedagem cloude digitar o comando abaixo:

Agora, você verá na pasta Http do Laravel 5.7, uma pasta Requests com a classe StoreProduct.php.

Na função rules() adicionarei as regras que eu havia colocado no Controller. Meu arquivo ficará assim então:

Com as regras definidas, basta eu fazer o type-hint  na função store() do meu Controller e tudo deve funcionar.

A partir daí, o Laravel já vai entender que a request que virá para esta função deverá passar pela validação do “StoreProduct”.

Imprimindo a validação para o usuário.

Apenas com a configuração anterior, não conseguiremos ver se alguma validação foi feita. Isto porque só veremos algum resultado imprimindo isto em uma view.

Mais pra frente vou apresentar melhor sobre as Views. Mas, por hora, criei a view products.blade.php para adicionar um produto e validar os dados.

Para relembrar, a view Products.blade.php foi vinculada a função index do meu “ProductsController” no artigo anterior. Agora, estou efetivamente criando ele com o conteúdo acima.

Antes de explicar o código acima, vamos entender o fluxo do Form Request Validation no Laravel 5.7. Ao dar o type-hint do Form Request Validation na função do Controller, você está dizendo ao Laravel que esta validação será acionada antes de executar qualquer ação da função. Se os dados forem validados corretamente, o processo segue. Senão, o usuário é redirecionado automaticamente para a rota anterior. Neste caso, mostrando a view “Products”.

Agora voltando ao código da View. Nas primeiras linhas, verifico se existe alguma coisa na variável $errors. (Variável já implementada pelo Laravel 5.7).

Se houver alguma coisa nele, faço a varredura de todos os erros e imprimo na <li>.

Se não houver nenhum erro, insiro a mensagem de sucesso.

Personalizando as mensagens da validação

Por fim, só precisamos editar mensagens personalizadas para os nossos erros. Para isto, vou adicionar a função messages() à classe “StoreProducts”.

Como podemos ver no código acima, a função messages() apenas retorna um array com as mensagens específicas de cada regra. Para definir uma mensagem geral à uma regra, apenas utilizamos a regra como no exemplo:

Para adicionar uma mensagem específica ao campo em questão, basta coloca o nome_do_campo.nome_da_regra.

Conclusão

Agora que conseguimos fazer as validações dos dados inseridos em nosso formulário, garantimos a integridade do banco e melhoramos a interação do usuário com cada tela.

Para o próximo artigo, vamos implementar um pouco de segurança a esta área, trazendo o conceito dos middlewares no Laravel 5.7.

Compartilhe

Última atualização: 23 de novembro de 2018