Blog Bugginho Academy

Migrando do Codeigniter para o Laravel 5.3 (Parte 6)

Dando continuidade ao artigo, vamos seguir com a criação do nosso CRUD. No último post nós tinhamos concluído a tela de carregamento de nosso formulário. Vamos agora ver como validar os dados desse formulário no “Back-end” e como gravar esses dados em nosso banco de dados.

A primeira coisa que vamos fazer é informar para o nosso formulário para onde ele precisa enviar os dados digitados. Abra o arquivo "resources/views/client/client_create.blade.php" e na linha 8, digite o seguinte código:

Pronto, agora precisamos criar o nosso método “Store” em nosso controller:

Você deve ter percebido que essa método recebe como parâmetro Request $request. Quando você passa esse parâmetro para uma método, ele injeta a classe Request, que permite a você manipular dados da requisição, como os dados enviados pelo formulário, por exemplo. Vale muito a pena dar uma lida na documentação:

Se você carregar a sua aplicação, preencher o formulário e dispará-lo, você receberá o seguinte erro: "MethodNotAllowedHttpException". Mas por que isso aconteceu? Porque em nosso arquivos de rotas, por discuido eu especifiquei que a rota "client/store" seria acessada por get, onde na verdade ela será acessada por post. Vamos alterar esse arquivo

Teste sua aplicação novamente e você receberá outro erro, dessa vez o "TokenMismatchException". Deixei esse erro propositalmente para vocês entenderem um comportamento do Laravel.

Por padrão o Laravel faz uma verificação e CSRF para aumentar a segurança de sua aplicação então, todo formulário dele deve ter um campo "_token" com um identificador único. Para criar esse token, basta abrir o seu arquivo "resources/views/client/client_create.blade.php" e em qualquer ponto do formulário (eu aconselho logo antes do botão submit), inserir o seguinte código:

Prontinho, agora se você testar sua aplicação, ao disparar o formulário, a tela do navegador ficará branca (afinal, não mandamos ele renderizar nada), porem se você acessar seu banco de dados, verá os dados cadastrados 🙂

Melhorando o nosso Controller

Nosso controle está bastante simples, mas e se eu disse que dá para simplificar ainda mais? O Laravel tem um recursos muito bacana chamado Mass Assignment, que não é um recurso exclusivo do Laravel, mas está presente no Framework.

Com o Mass Assignment, você pode cadastrar um registro em apenas uma linha, passando os dados em massa para o Model.

Esse recurso é muito útil, porem pode se tornar uma dor de cabeça se você for muito permissivo. Sempre certifique-se de liberar para acesso apenas os campos que realmente são relevantes à operação

Para usa-lo, antes vamos informar ao Model, quais colunas queremos gravar em massa

Agora que o nosso Model já sabe quais dados ele pode aceitar em massa, vamos alterar o nosso Controller.

A linha Client::create($data); retorna um objeto do tipo Client, então se você precisar obter os dados do cliente gravado (como por exemplo o id), é só você criar uma variável e setar essa linha como seu valor.

Olha como nosso Controller ficou ainda mais enxuto :), porem ele ainda não exibe nada. Vamos agora informar ao nosso usuários se tudo ocorreu bem, para isso vamos alterar novamente o nosso Controller

Altere também a sua View "resources/views/client/client_create.blade.php" inserindo o seguinte bloco:

Prontinho. Agora se você testar a aplicação, verá que o seu usuário já receberá uma mensagem que tudo correu bem, ao enviar o formulário 🙂 porem você deve estar se perguntando: “Sim, mas e caso o usuário submeta o formulário em branco?”

Validando os dados do formulário

Validar os dados do formulário é algo muito simples. O Laravel permite que criemos Custom Requests para tratar nossas requisições. Vamos utilizar o Artisan para criar nossa Request:

Você verá que dentro da pasta "app/Http", o Artisan criou um novo diretório chamado “Requests” e dentro dele um arquivo chamado "ClientRequest.php". Vamos fazer algumas alterações nesse arquivo.

A primeira modificação será no método authorize(). Ele informa para o Laravel se um determinado método está disponível a receber requisições. Vamos alterar o retorno desse método para true.

Agora que a brincadeira começa. O Laravel dispõe de uma biblioteca para validações, muito rica, mas se mesmo assim você precisar de mais recursos, você pode usar uma biblioteca de terceiros, uma sugestão é a brasileira, Respect Validation.

Bem, validar esse formulário é uma tarefa muito simples. Se você já deu um lida na documentação da Biblioteca de validação do Laravel, você já deve ter uma noção do que fazer:

Sim, blz, mas como é que informamos para o Laravel usar esse arquivo como “validador” da nossa requisição?

Simples, basta voltarmos ao nosso Controller e alterarmos a seguinte linha:

Lembre-se de importar a classe "ClientRequest", no início do seu arquivo

Isso é o suficiente para termos uma validação bem precisa no Laravel, porem as mensagens estão sendo exibidas em inglês. Como resolver isso?

Customizando suas mensagem de validação

Para definir mensagens customizadas é bem simples, basta criar um método chamado messages() em seu arquivo ClientRequest, como o modelo abaixo:

Caso você queira manter o formulário preenchido para que o usuário não perca os dados que já tinha informado, basta passar como value do campo a função old, passando como parâmetro o nome do campo. Ex:

Espero que tenham gostado. Na próxima parte desse artigo eu mostrarei como atualizar as informações de um registro e como apagá-lo.

Até a próxima ????

 

Paulo Reis

Comentar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Your Header Sidebar area is currently empty. Hurry up and add some widgets.