Estoy tratando de conseguir algo muy básico en funcionamiento. Estoy acostumbrado a CI y ahora estoy aprendiendo Laravel 4, y sus documentos no lo hacen fácil. De todos modos, estoy tratando de crear un formulario de inicio de sesión y sólo asegurarse de que los datos se publican con éxito mediante la impresión en el siguiente formulario. Estoy recibiendo esta excepción:
Symfony Component HttpKernel Exception
MethodNotAllowedHttpException
y mi 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');
}
}
y rutas tiene:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
y finalmente mi vista login.php tiene esta dirección de formulario:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Cualquier ayuda será muy apreciada.
El error se debe a que está enviando información a una ruta GET
.
Yo dividiría tu enrutamiento para validar
en rutas GET
y POST
separadas.
Nuevas rutas: ``php Route::post('validate', 'MemberController@validateCredentials');
Route::get('validate', function () { return View::make('members/login'); });
Entonces tu método del controlador podría ser simplemente
```php
public function validateCredentials()
{
$email = Input::post('email');
$contraseña = Input::post('contraseña');
return "Correo electrónico: " . $correo electrónico . " y Contraseña: " . $contraseña;
}
Mi sospecha es que el problema está en la definición de tu ruta.
Usted definió la ruta como una solicitud GET
pero el formulario probablemente está enviando una solicitud POST
. Cambia la definición de tu ruta.
``php Route::post('/validate', 'MemberController@validateCredentials');
Generalmente es mejor práctica usar rutas con nombre (ayuda a escalar si el método/clase del controlador cambia).
```php
Route::post('/validate', array(
'as' => 'validate',
'uses' => 'MemberController@validateCredentials'
));
En el formulario utiliza lo siguiente
``Formulario::open(array('route' => 'validate')); ``;
php echo Form::open(array('action' => 'MemberController@validateCredentials'); >
por defecto, Form::open()
asume un método POST
.
Si tienes GET
en tus rutas, cámbialo por POST
en la ruta correspondiente.
o si quieres usar el método GET
, entonces añade el parámetro method
.
Por ejemplo
Form::open(array('url' => 'foo/bar', 'method' => 'get'))