Observação: Este tutorial refere-se ao Laravel-4-BETA, estando totalmente DESATUALIZADO para a versão atual. Muita coisa mudou no framework…
No começo, quando tudo era task, criamos a lista.
Refatoramos as tasks.
Agora, tudo é lista e criamos os usuários.
Precisamos refatorar as listas.
E também as tasks (depois).
Agora as listas pertencem a um usuário.
Quando o usuário autenticado no sistema vai para a página de listas, ele só pode ver as listas dele e não todas as listas do sistema, como está ocorrendo.
Refatorando Models
Precisamos declarar o relacionamento entre os usuários e as listas.
Já declaramos relacionamentos uma vez, lembra?
app/models/User.php
public function listas() { return $this->hasMany('Lista', 'user_id'); }
app/models/Lista.php
public function usuario() { return $this->belongsTo('User', 'user_id'); }
Refatorando o Controller
Com carinho, vamos refatorar o ListController.php.
Para ninguém se perder, vou fazer por etapas.
Primeiro, vamos refatorar o método postCreate(), que cria novas listas, para criar listas que recebam um ID de usuário.
else { $list = new Lista; $list->titulo = Input::get('titulo'); $list->user_id = Auth::user()->id; $list->save(); return View::make('add_list')->with('sucesso', TRUE); }
O que eu fiz foi, dentro do else, que começa na linha 21 do método postCreate(), inseri a linha 24, que pega da sessão o id do usuário logado.
Agora, facilmente, pode-se entender como refatorar o método listar(), que está listando todas as listas do sistema, mas que desejamos que liste apenas as listas do usuário.
public function listar() { return View::make('list_lists')->with('lists', User::find(Auth::user()->id)->listas); }
OMGWTFBBQ?!
Ficou complicado de entender?
Simples, o que User::find(Auth::user()->id)->listas está fazendo é:
- Procurando um usuário (User::find()) onde o id do usuário é Auth::user()->id.
- A busca retorna um objeto do tipo User.
- Pega as listas do usuário, objeto_user->listas.
Vamos refatorar o método listarTasks, que lista as tasks de uma lista específica.
Novamente, qualquer usuário está podendo ver qualquer lista.
Mas agora NÃO MAIS!
public function listarTasks($lista_id = 0) { if ($lista_id == 0) return $this->listar(); return View::make('lista')->with('lista', User::find(Auth::user()->id)->listas()->where('id', '=', $lista_id)->first()); }
E ai, ficou tenso?
Se você ler da esquerda para a direita, com carinho, vai conseguir entender sem problemas.
Mas, se ficar na dúvida, recorra a documentação sobre relacionamento.
- Procurando um usuário (User::find()) onde o id do usuário é Auth::user()->id.
- A busca retorna um objeto do tipo User.
- Pega as listas do usuário, objeto_user->listas().
- Refina a busca das listas com uma cláusla where.
- Pega o primeiro resultado da busca.
Tá ficando da hora o nosso aplicativo 😀