Jeg prøver å få noe veldig grunnleggende til å kjøre. Jeg er vant til CI og lærer nå Laravel 4, og dokumentene deres gjør det ikke lett! Uansett, jeg prøver å lage et påloggingsskjema og bare sørge for at dataene blir lagt ut ved å skrive dem ut i neste skjema. Jeg får dette unntaket:
Symfony \ Komponent \ HttpKernel \ Unntak \ MethodNotAllowedHttpException
og min 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');
}
}
og ruter har:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
og til slutt har visningen login.php denne skjemaretningen:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
All hjelp vil bli satt stor pris på.
Du får denne feilen fordi du sender til en GET
-rute.
Jeg ville delt opp rutingen for validate
i en separat GET
og POST
rute.
**Nye ruter
Route::post('validate', 'MemberController@validateCredentials');
Route::get('validate', function () {
return View::make('members/login');
});
Da kan controller-metoden din bare være
public function validateCredentials()
{
$email = Input::post('email');
$password = Input::post('password');
return "Email: " . $email . " and Password: " . $password;
}
```
Jeg mistenker at problemet ligger i rutedefinisjonen.
Du har definert ruten som en GET
-forespørsel, men skjemaet sender sannsynligvis en POST
-forespørsel. Endre rutedefinisjonen.
Route::post('/validate', 'MemberController@validateCredentials');
```
Det er generelt bedre å bruke navngitte ruter (hjelper til med å skalere hvis kontrollermetoden/klassen endres).
````php
Route::post('/validate', array(
'as' => 'validate',
'uses' => 'MemberController@validateCredentials'
));
```
I skjemaet bruker du følgende
```
<?php echo Form::open(array('route' => 'validate')); ?>
```
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Som standard forutsetter Form::open()
en POST
-metode.
du har GET
i rutene dine. endre det til POST
i den tilsvarende ruten.
eller hvis du vil bruke GET
-metoden, legger du til parameteren method
.
f.eks.
Form::open(array('url' => 'foo/bar', 'method' => 'get'))