Estou a tentar pôr algo muito básico a funcionar. Estou habituado a CI e agora a aprender Laravel 4, e os seus documentos não estão a facilitar! De qualquer forma, estou a tentar criar um formulário de login e apenas a tentar que os dados sejam publicados com sucesso, imprimindo-o no formulário seguinte. Estou a obter esta excepção:
Symfony Componente HttpKernel Exceção MethodNotAllowedHttpException
e o meu MemberController.php:
public function index()
{
if (Session::has('userToken'))
{
/*Retrieve data of user from DB using token & Load view*/
return View::make('members/profile');
}else{
return View::make('members/login');
}
}
public function validateCredentials()
{
if(Input::post())
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}else{
return View::make('members/login');
}
}
e as rotas têm:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
e finalmente a minha visão login.php tem esta direcção de formulário:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Qualquer ajuda será muito apreciada.
Você está recebendo esse erro porque você está lançando em uma rota GET
.
Eu dividiria a sua rota de "validar" em rotas separadas de "META" e "PÓS".
Novas Rotas:
Rota::post('validate', 'MemberController@validateCredentials');
Rota::get('validar', função () {
retornar View::make('members/login');
});
Então o seu método controlador poderia ser apenas
função pública validarCredenciais()
{
$email = Input::post('email');
$password = Input::post('password');
retorno "Email: " . $email . " e Password: " . $password;
}
A minha suspeita é que o problema está na definição da sua rota.
Você definiu a rota como um pedido GET
mas o formulário provavelmente está enviando um pedido POST
. Altere a definição da sua rota.
Rota::post('/validate', 'MemberController@validateCredentials');
It's geralmente é a melhor prática para usar rotas nomeadas (ajuda a escalar se o método/classe do controlador mudar).
Rota::post('/validate', array(
'as' => 'validar',
'uses' => 'MemberController@validateCredentials'
));
No formulário, utilize o seguinte
<?php echo Form::open(array('route' => 'validate')); ?>
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
por padrão, Form::open()
assume um método POST
.
você tem GET
em suas rotas. mude para POST
na rota correspondente.
ou se você quiser utilizar o método GET
, então adicione o parâmetro method
.
por exemplo
Formulário::open(array('url' => 'foo/bar', 'method' => 'get'))