laravel meta MethodNotAllowedHttpException

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;
}
```
Komentarai (0)

Į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')); ?>
```
Komentarai (0)
<?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')))
Komentarai (0)