Ik probeer iets heel basaals draaiend te krijgen. Ik ben gewend aan CI en leer nu Laravel 4, en hun docs maken het niet gemakkelijk! Hoe dan ook, ik probeer een login formulier te maken en ervoor te zorgen dat de data succesvol wordt gepost door het af te drukken in het volgende formulier. Ik krijg deze uitzondering:
Symfony Component HttpKernel Uitzondering
MethodNotAllowedHttpException
en mijn 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');
}
}
en routes heeft:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
en tenslotte mijn view login.php heeft deze formulier richting:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Alle hulp zal zeer gewaardeerd worden.
Je krijgt die foutmelding omdat je naar een GET
route post.
Ik zou je routing voor validate
splitsen in een aparte GET
en POST
routes.
Nieuwe Routes:
Route::post('validate', 'MemberController@validateCredentials');
Route::get('validate', function () {
return View::make('members/login');
});
Dan zou je controller methode gewoon kunnen zijn
publieke functie validateCredentials()
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}
Mijn vermoeden is dat het probleem in uw route definitie ligt.
Je hebt de route gedefinieerd als een GET
verzoek, maar het formulier stuurt waarschijnlijk een POST
verzoek. Verander je route definitie.
Route::post('/validate', 'MemberController@validateCredentials');
Het is over het algemeen beter om routes met een naam te gebruiken (helpt om te schalen als de controller methode/klasse verandert).
Route::post('/validate', array(
'as' => 'validate',
'uses' => 'MemberController@validateCredentials'
));
Gebruik in het formulier het volgende
<?php echo Form::open(array('route' => 'validate')); ?>
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
standaard gaat Form::open()
uit van een POST
methode.
je hebt GET
in je routes. verander het in POST
in de corresponderende route.
of als je de GET
methode wilt gebruiken, voeg dan de method
param toe.
bijv.
Form::open(array('url' => 'foo/bar', 'method' => 'get'))