ToDoVel [Parte 08]: Adicionando uma Task (Parte 1)

Observação: Este tutorial refere-se ao Laravel-4-BETA, estando totalmente DESATUALIZADO para a versão atual. Muita coisa mudou no framework…

Vamos começar a acelerar o passo agora, chega de blá-blá-blá e lenga-lenga sobre como as coisas funcionam.
Vamos praticar.

Primeiro, para o nosso todo precisamos criar um “formulário” para criar tasks para a to-do list.

Criando as rotas para adicionar tasks

Primeiro, vou criar as rotas para adicionar as tasks.
Arquivo app/routes.php

Criando o TaskController

Como é possível entender a intenção a partir das rotas, preciso criar um controller de nome Task que irá executar ações, tanto para GET quanto para POST.
Crio o arquivo app/controllers/TaskController.php

Criei apenas apenas o método para o GET, depois faremos para o post.

Criando a view com formulário

Vamos criar o arquivo add_task.blade.php para exibir o formulário de criação de uma task.
Para isso, vamos utilizar as facilidades de criação de formulários do Laravel 4.
add_task.blade.php

Note que você não é obrigado a utilizar a facilidade de Formulários do Laravel 4, mas ela é uma mão na roda, principalmente o método Form::open().
O método open aceita também que seja passado o controller@metodo que irá receber o post.
Posso reescrever o formulário para ficar assim:

Validando o Formulário Enviado

Laravel 4 possui um componente de validação nativo.
Uma super mão biônica na roda!
O que vamos fazer é criar as regras de validação e depois aplicá-las.

Devagar para não endoidar:

Exibindo as Mensagens de Erro de Validação

Quando a nossa validação encontrou um erro, fizemos um redirecionamento para a página na qual mostramos o formulário de criação de task.
Junto com o redirecionamento, utilizamos o método withErrors passando uma instância do validator.
O que o Laravel 4 está fazendo é o seguinte:

  • Grava uma sessão com a mensagem de erro e executa o redirecionamento.
  • Na página que recebe o redirecionamento, quando executamos um View::make, comoca no contexto da view uma variável de nome $errors
  • Limpa a sessão

Na verdade, o nome $errors está sempre presente na visão, mesmo que seja vazio, mesmo que não haja erro, mesmo que não seja um redirect.
Ele está sempre lá.

Assim sendo, só o que temos que fazer é imprimir a mensagem na view add_task.blade.php

Por hora tá bom.
É tudo fácil demais.
Cadê o desafio?

6 thoughts on “ToDoVel [Parte 08]: Adicionando uma Task (Parte 1)

  1. Ao acessar a url “/task/add” eu recebia um : NotFoundHttpException.

    Verifiquei nome dos metodos, do controller, permissão de leitura dos arquivos e até as configurações do Nginx e não descobria por que diabos a porra do Laravel estava lançando essa exceção.

    Foi então que percebi que o Routes::any também trata requests “get”, e como existiam duas routes com mesmo nome, poderia estar causando algum conflito. Mudei o nome da rota para:

    Route::any(‘task/desgraça’);

    E quando acessei “localhost/task/add” funcionou! \o

    Na documentação (http://laravel.com/docs/routing) vi que existe o Route::post, então substitui o ::any por ::post.

    1. O tutorial do ToDoVel foi feito para o beta do Laravel 4.
      Algumas poucas coisas mudaram na versão oficial do 4, e mais ainda no estado atual, 4.2.
      Infelizmente essas mudanças podem afetar o processo de aprendizado descrito no ToDoVel…

  2. Estou com um problema.
    Mas primeiro, apenas para entender, porque na versão que baixei do Laravel, a pasta de Controllers está em app/http/controllers.
    Por algum motivo a minha classe TaskController não está sendo encontrada quando requisito /task/add, da o erro “Class TaskController does not exist”, porém criei a classe nesta pasta junto com a HomeController e mesmo assim não funcionou.

    1. FReNeTiC, pesquisando encontrei que toda vez que uma classe for criada ou tiver seu nome alterado, é necessário atualizar o class loader utilizando o comando php artisan dump-autoload.

      Meu problema foi resolvido, obrigado!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *