Observação: Este tutorial refere-se ao Laravel-4-BETA, estando totalmente DESATUALIZADO para a versão atual. Muita coisa mudou no framework…
Bom seria poder logar.
Então vamos logar 😀
Rota Get
To com preguiça de escrever controllers, então vou fazer tudo dentro do arquivo routes.php.
/* login */ Route::get('login', function() { return View::make('login'); });
Login.blade.php
@extends('template') @section('conteudo') <div class="row-fluid marketing"> <div class="span6"> @if ( count($errors) > 0) Erros encontrados:<br /> <ul> @foreach ($errors->all() as $e) <li>{{ $e }}</li> @endforeach </ul> @endif <form method="post" action="{{ URL::to('login') }}"> <label> Email: <input type="text" name="email"> </label> <label> Senha: <input type="password" name="senha"> </label> <input type="submit" value="Login"> </form> </div> </div> @stop
Rota Post – Logando o Usuário
Route::post('login', function() { $regras = array("email" => "required|email", "senha" => "required"); $validacao = Validator::make(Input::all(), $regras); if ($validacao->fails()) { return Redirect::to('login')->withErrors($validacao); } //tenta logar o usuário if (Auth::attempt( array('email' => Input::get('email'), 'password' => Input::get('senha') ) ) ) { return Redirect::to('/'); } else { return Redirect::to('login')->withErrors('Usuário ou Senha Inválido'); } });
O que está acontecendo?
Ao invés de criar um controller para a parte do login, coloquei tudo (o get e o post) do login dentro do arquivo routes.php.
Como era de se esperar, no POST, eu faço uma validação dos dados antes de executar as ações que desejo, que nesse caso é logar o usuário.
Utilizo o Auth para autenticar o usuário.
O Auth está fazendo o uso da tabela que criamos no artigo 18 e utilizando a classe User que definimos no artigo 19.
Foi difícil?
Para com preguiça e cria um controller…. 😛
Abs
NUNCA!
Ficou feio isso hein?! Cadê a divisão de responsabilidades?!
Pode ser que isso seja respondido lá na frente, mas de qualquer forma aqui vai uma questão:
– Estou apenas iniciando com o Laravel, desenvolvo com o CakePhp a um bom tempo, e resolvi estudar para ver se o “Lara” é tão bom mesmo quanto ouço falar. Mas a validação não deveria ser responsabilidade dos Models?
Sim e não.
O caso é questão de conceito…
Por um lado, temos a validação de um formulário, que pode ou não conter dados que serão utilizados por um banco de dados (model), como por exemplo um verificador de captcha.
Essa validação deveria ser feita pela camada de modelo ou pela camada de controle do projeto?
Porém, pelo outro lado, temos a validação dos dados que são inseridos no banco de dados pela camada model. De fato, na inserção deve haver validação. Essa validação deveria ser de responsabilidade da classe model?
Agora, quando juntamos as duas coisas?
Quando temos uma validação de formulário e, por incrível que pareça, os dados validados serão utilizados, dentro da lógica da aplicação, para serem inseridos no banco de dados, quem deve validá-los? O controller ou o model? Ou devemos validá-los duas vezes?
Cabe ao engenheiro de software e/ou equipe de desenvolvimento definir.
Alguns frameworks já tomam essa decisão, outros deixam para implementação e alguns oferecem as duas formas.
Laravel oferece a facilidade do Model-Form-Bind: http://laravel.com/docs/html#form-model-binding
Eu prefiro manter todas as validações no Controller, mas este é meu gosto.
O padrão MVC não faz imposições nem restrições de onde a validação deve ficar.
Caso queira saber mais, fica aqui algumas dicas de leitura:
Where to put validation in the MVC pattern
In MVC should a model handle validation?
Input Validation vs. Model Validation in ASP.NET MVC
como estou começando com Laravel, gostaria de saber como ficaria se fosse criado um controller em vez de criar tudo nas rotas? valeu.
Júnior,
se você leu todos os outros artigos, chegou neste e não conseguiu compreender como fazer o login utilizando controller, sugiro que você volte a estudar Laravel desde o artigo 00.
Agora, se seu caso for pura preguiça de pensar, segue o controller feito: https://gist.github.com/frenetic/5999757
olá
testei dos dois modos e tive umas duvidas
utilizando o jeito q voce postou deu tudo certo
utilizando controllers nao deveria ser Route::get(‘login’, ‘LoginController@getLogin’); ao inves de BaseController? (eu troquei e deu certo)
e esse [´before’ => ‘csfr’ …..] parece que deu problema aqui porque com ele nao funcionou, deu tokenmistmatch e sem ele funcionou, mas como nao sei pra que serve nao sei se é necessário
obrigado
beleza a proxima sessao fala desse CSFR, vou ler lá e acho que deve resolver o problema anterior 😉