Sto cercando di far funzionare qualcosa di molto semplice. Sono abituato a CI e ora sto imparando Laravel 4, e i loro documenti non lo rendono facile! Comunque, sto cercando di creare un modulo di accesso e assicurarmi che i dati vengano inviati con successo stampandoli nel modulo successivo. Sto ottenendo questa eccezione:
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
e il mio 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 i percorsi hanno:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
e infine la mia vista login.php ha questa direzione del modulo:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Qualsiasi aiuto sarà molto apprezzato.
Stai ricevendo questo errore perché stai postando su una rotta GET
.
Dividerei il tuo routing per validate
in una rotta GET
e POST
separate.
Nuove rotte: ``php Route::post('validate', 'MemberController@validateCredentials');
Route::get('validate', function () { return View::make('members/login'); });
Allora il tuo metodo di controllo potrebbe essere semplicemente
``php
funzione pubblica validareCredenziali()
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " e Password: " . $password;
}
Il mio sospetto è che il problema stia nella definizione del tuo percorso.
Hai definito la rotta come una richiesta GET
ma il modulo sta probabilmente inviando una richiesta POST
. Cambia la definizione della tua rotta.
``php Route::post('/validate', 'MemberController@validateCredentials');
In genere è una pratica migliore usare route con nome (aiuta a scalare se il metodo/classe del controller cambia).
``php
Route::post('/validate', array(
'as' => 'validate',
'uses' => 'MemberController@validateCredentials'
));
Nel modulo usa il seguente
<?php echo Form::open(array('route' => 'validate')); ?
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?
per default, Form::open()
assume un metodo POST
.
hai GET
nelle tue rotte. cambialo in POST
nella rotta corrispondente.
o se vuoi usare il metodo GET
, aggiungi il parametro method
.
ad es.
Form::open(array('url' => 'foo/bar', 'method' => 'get'))