[Laravel] Iniciantes – Tutorial: Criando um formulário de contato – Parte 04

Laravel para iniciantes

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:

Comando make:request Laravel

Este comando cria uma classe chamada ContatoEnviarRequest dentro de app/Http/Request

Passo 02: Editando o ContatoEnviarRequest

Edite a classe:

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:

 

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:

Exemplo de erro 302 Laravel

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

Obs: A variável $erros  é uma instancia da classe ViewErrorBag.

Teste no navegador:

Exibindo mesnagens de erro

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()

  • Nilson Alves

    Olá Jansen,

    Estou seguindo o tutorial e até aqui estava indo bem…nesse passo 4 o seguinte erro me é informado quando clico em “enviar” com o formulário em branco:

    …ErrorException in Validator.php line 424:
    Invalid argument supplied for foreach()

    Fiz algumas mudanças no foreach, mas sem sucesso…

    Aguardo seus comentários.

    • Boa tarde Nilson!

      Poderia postar o erro complento?

      • Nilson Alves

        Jensen,
        Segue tela…

        • Nilson Alves

          Olá Jansen,
          Esqueça esse erro…refiz a instalação de todo o ambiente(estava com dúvidas da instalação anterior) e refiz novamente e para minha surpresa funcionou perfeitamente até a conclusão do passo 4.
          Não refiz a parte da Interface(apesar de ter entendido o que você ensinou).
          Agora vou continuar o tutorial…

  • João Bosco Delfino Jr.

    https://uploads.disquscdn.com/images/f60a8ee735e213adec59ea9097c2428b60191997541227ff9c6c62fc18bb4a56.png https://uploads.disquscdn.com/images/7c51134732f27b8b41099ba297aa0113d5e0445b83fb0f44d41be5fd73b3bbed.png https://uploads.disquscdn.com/images/4848f84d8b060a16e6e54d6801b61187787b66be276e66a8e964ebb8409f7eff.png Olá Jansen,

    Também estou seguindo o tutorial, mas deu um erro nesse passo 4

    Esta página não está funcionando

    agenda-jbdj2006855067.codeanyapp.com não consegue atender a esta solicitação no momento.
    HTTP ERROR 500

    Segue o 3 arquivos:

    • Bom dia Joao!

      Estranho.. Teria que ver no Log o motivo. Dá uma olhada lá no arquivo “storage/logs/laravel.log”.

      Posta aqui o último trace, por favor.

      • João Bosco Delfino Jr.

        #9 /home/cabox/workspace/artisan(36): IlluminateFoundationConsoleKernel->handle(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

        #10 {main}

        Tem outras linhas antes da #9. Você quer elas também?

        • Opa! Vou precisar sim principalmente a anterior a #0 que é onde de fato informa o problema 🙂

          • João Bosco Delfino Jr.

            #0 /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php(152): SymfonyComponentConsoleInputArgvInput->addLongOption(‘plain’, NULL)
            #1 /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php(84): SymfonyComponentConsoleInputArgvInput->parseLongOption(‘–plain’)
            #2 /home/cabox/workspace/vendor/symfony/console/Input/Input.php(64): SymfonyComponentConsoleInputArgvInput->parse()
            #3 /home/cabox/workspace/vendor/symfony/console/Command/Command.php(221): SymfonyComponentConsoleInputInput->bind(Object(SymfonyComponentConsoleInputInputDefinition))
            #4 /home/cabox/workspace/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): SymfonyComponentConsoleCommandCommand->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))
            #5 /home/cabox/workspace/vendor/symfony/console/Application.php(791): IlluminateConsoleCommand->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))
            #6 /home/cabox/workspace/vendor/symfony/console/Application.php(186): SymfonyComponentConsoleApplication->doRunCommand(Object(IlluminateRoutingConsoleControllerMakeCommand), Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))
            #7 /home/cabox/workspace/vendor/symfony/console/Application.php(117): SymfonyComponentConsoleApplication->doRun(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))
            #8 /home/cabox/workspace/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): SymfonyComponentConsoleApplication->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))
            #9 /home/cabox/workspace/artisan(36): IlluminateFoundationConsoleKernel->handle(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))
            #10 {main}

          • João Bosco Delfino Jr.

            Jansen,

            Parece que o erro tem algo haver com esse comando abaixo:

            php artisan make:controller ContatoController –plain

            Quando fui tentar executar esse comando, o terminal acusou erro nesse parâmetro “–plain”

            Pesquisando, soube que o Laravel 5.2 (o que estou usando) não aceita esse parâmetro, daí substitui por “–resource”:

            php artisan make:controller ContatoController –resource

            Sabe dizer, se tem algo haver mesmo?

          • João Bosco Delfino Jr.

            [2018-03-10 16:08:12] local.ERROR: exception ‘SymfonyComponentConsoleExceptionRuntimeException’ with message ‘The “–plain” option does not exist.’ in /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php:211
            Stack trace:

            #0 /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php(152): SymfonyComponentConsoleInputArgvInput->addLongOption(‘plain’, NULL)

            #1 /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php(84): SymfonyComponentConsoleInputArgvInput->parseLongOption(‘–plain’)

            #2 /home/cabox/workspace/vendor/symfony/console/Input/Input.php(64): SymfonyComponentConsoleInputArgvInput->parse()

            #3 /home/cabox/workspace/vendor/symfony/console/Command/Command.php(221): SymfonyComponentConsoleInputInput->bind(Object(SymfonyComponentConsoleInputInputDefinition))

            #4 /home/cabox/workspace/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): SymfonyComponentConsoleCommandCommand->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

            #5 /home/cabox/workspace/vendor/symfony/console/Application.php(791): IlluminateConsoleCommand->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

            #6 /home/cabox/workspace/vendor/symfony/console/Application.php(186): SymfonyComponentConsoleApplication->doRunCommand(Object(IlluminateRoutingConsoleControllerMakeCommand), Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

            #7 /home/cabox/workspace/vendor/symfony/console/Application.php(117): SymfonyComponentConsoleApplication->doRun(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

            #8 /home/cabox/workspace/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): SymfonyComponentConsoleApplication->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

            #9 /home/cabox/workspace/artisan(36): IlluminateFoundationConsoleKernel->handle(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

            #10 {main}

      • João Bosco Delfino Jr.

        [2018-03-10 16:08:12] local.ERROR: exception ‘SymfonyComponentConsoleExceptionRuntimeException’ with message ‘The “–plain” option does not exist.’ in /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php:211

        Stack trace:

        #0 /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php(152): SymfonyComponentConsoleInputArgvInput->addLongOption(‘plain’, NULL)

        #1 /home/cabox/workspace/vendor/symfony/console/Input/ArgvInput.php(84): SymfonyComponentConsoleInputArgvInput->parseLongOption(‘–plain’)

        #2 /home/cabox/workspace/vendor/symfony/console/Input/Input.php(64): SymfonyComponentConsoleInputArgvInput->parse()

        #3 /home/cabox/workspace/vendor/symfony/console/Command/Command.php(221): SymfonyComponentConsoleInputInput->bind(Object(SymfonyComponentConsoleInputInputDefinition))

        #4 /home/cabox/workspace/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): SymfonyComponentConsoleCommandCommand->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

        #5 /home/cabox/workspace/vendor/symfony/console/Application.php(791): IlluminateConsoleCommand->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

        #6 /home/cabox/workspace/vendor/symfony/console/Application.php(186): SymfonyComponentConsoleApplication->doRunCommand(Object(IlluminateRoutingConsoleControllerMakeCommand), Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

        #7 /home/cabox/workspace/vendor/symfony/console/Application.php(117): SymfonyComponentConsoleApplication->doRun(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

        #8 /home/cabox/workspace/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): SymfonyComponentConsoleApplication->run(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

        #9 /home/cabox/workspace/artisan(36): IlluminateFoundationConsoleKernel->handle(Object(SymfonyComponentConsoleInputArgvInput), Object(SymfonyComponentConsoleOutputConsoleOutput))

        #10 {main}

        Jansen,

        Parece que o erro tem algo haver com esse comando abaixo:

        php artisan make:controller ContatoController –plain

        Quando fui tentar executar esse comando, o terminal acusou erro nesse parâmetro “–plain”

        Pesquisando, soube que o Laravel 5.2 (o que estou usando) não aceita esse parâmetro, daí substitui por “–resource”:

        php artisan make:controller ContatoController –resource

        Sabe dizer, se tem algo haver mesmo?