laravel smider MethodNotAllowedHttpException

Jeg forsøger at få noget meget grundlæggende til at køre. Jeg er vant til CI og lærer nu Laravel 4, og deres docs gør det ikke let! Anyways, jeg forsøger at oprette en login formular og bare sørge for at data er bogført med succes ved at udskrive det i den næste formular. Jeg får denne undtagelse:

Symfony \ Component \ HttpKernel \ Exception \ 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 endelig har min view login.php denne formular retning:

<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

Enhver hjælp vil blive meget værdsat.

Du får denne fejl, fordi du sender til en GET-rute.

Jeg ville opdele din routing for validate i separate GET- og POST-ruter.

Nye ruter:


Route::post('validate', 'MemberController@validateCredentials');

Route::get('validate', function () {
    return View::make('members/login');
});
```

Så kunne din controllermetode bare være

````php
public function validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}
```
Kommentarer (0)

Min mistanke er, at problemet ligger i din rutedefinition.

Du har defineret ruten som en GET-forespørgsel, men formularen sender sandsynligvis en POST-forespørgsel. Ændr din rutedefinition.


Route::post('/validate', 'MemberController@validateCredentials');
```

Det er generelt bedre praksis at bruge navngivne ruter (hjælper med at skalere, hvis controllermetoden/klassen ændres).
````php
Route::post('/validate', array(
    'as' => 'validate',
    'uses' => 'MemberController@validateCredentials'
));
```

I formularen bruges følgende
```
<?php echo Form::open(array('route' => 'validate'))); ?>
```
Kommentarer (0)
<?php echo Form::open(array('action' => 'MemberController@validateCredentials'))); ?>

som standard antager Form::open() en POST-metode.

du har GET i dine ruter. ændre den til POST i den tilsvarende rute.

eller hvis du ønsker at bruge GET-metoden, skal du tilføje parameteren method.

f.eks.

Form::open(array('url' => 'foo/bar', 'method' => 'get')))
Kommentarer (0)