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 😀