Bandau paleisti kažką labai paprasto. Esu pripratęs prie CI ir dabar mokausi Laravel 4, o jų dokumentai to nepalengvina! Bet kokiu atveju bandau sukurti prisijungimo formą ir tiesiog įsitikinti, kad duomenys sėkmingai paskelbti, spausdinant juos kitoje formoje. Gaunu šią išimtį:
Symfony \ Component \ HttpKernel \ Išimtis \
MethodNotAllowedHttpException
ir mano 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');
}
}
ir maršrutai turi:
Route::get('/', function()
{
return View::make('hello');
});
Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');
ir galiausiai mano peržiūra login.php turi šią formos kryptį:
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
Bet kokia pagalba bus labai dėkinga.
Ši klaida gaunama, nes siunčiate į GET
maršrutą.
Norėčiau padalyti jūsų validate
maršrutą į atskirus GET
ir POST
maršrutus.
Naujieji maršrutai:
Route::post('validate', 'MemberController@validateCredentials');
Route::get('validate', function () {
return View::make('members/login');
});
```
Tada jūsų valdiklio metodas galėtų būti tiesiog
````php
viešoji funkcija validateCredentials()
{
$email = Input::post('email');
$password = Input::post('password');
return "El. paštas: " . $email . " ir Slaptažodis: " . $password;
}
```
Įtariu, kad problema slypi jūsų maršruto apibrėžtyje.
Maršrutą apibrėžėte kaip GET
užklausą, tačiau forma tikriausiai siunčia POST
užklausą. Pakeiskite maršruto apibrėžtį.
Route::post('/validate', 'MemberController@validateCredentials');
```
Apskritai geriau naudoti įvardytus maršrutus (tai padeda mastelizuoti, jei keičiasi valdiklio metodas / klasė).
```php
Route::post('/validate', array(
'as' => 'validate',
'uses' => 'MemberController@validateCredentials'
));
```
Formoje naudokite tokį įrašą
```
<?php echo Form::open(array('route' => 'validate')); ?>
```
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>
pagal nutylėjimą Form::open()
numato POST
metodą.
savo maršrutuose turite GET
. pakeiskite jį į POST
atitinkamame maršrute.
arba jei norite naudoti GET
metodą, pridėkite method
parametrą.
Pvz.
Form::open(array('url' => 'foo/bar', 'method' => 'get')))