laravel хвърля MethodNotAllowedHttpException

Опитвам се да пусна нещо много елементарно. Свикнал съм с CI и сега уча Laravel 4, а техните документи не го правят лесно! Както и да е, опитвам се да създам формуляр за вход и просто да се уверя, че данните са публикувани успешно, като ги отпечатам в следващия формуляр. Получавам това изключение:

Symfony \ Component \ HttpKernel \ Exception \

MethodNotAllowedHttpException

и моят 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');
        }
    }

и маршрути има:

Route::get('/', function()
{
    return View::make('hello');
});

Route::get('/members', 'MemberController@index');
Route::get('/validate', 'MemberController@validateCredentials');

и накрая моят изглед login.php има тази посока на формата:

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

Всяка помощ ще бъде високо оценена.

Получавате тази грешка, защото изпращате към маршрут GET.

Бих разделил маршрутизацията ви за validate на отделни маршрути GET и POST.

Нови маршрути:

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

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

Тогава методът на вашия контролер може да бъде просто

публична функция validateCredentials()
{
    $email = Input::post('email');
    $password = Input::post('password');
    return "Email: " . $email . " and Password: " . $password;
}
Коментари (0)

Подозирам, че проблемът е в дефиницията на маршрута.

Дефинирали сте маршрута като заявка GET, но формулярът вероятно изпраща заявка POST. Променете дефиницията на маршрута.

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

Като цяло е по-добра практика да се използват именувани маршрути (помага за мащабиране, ако методът/класът на контролера се промени).

Route::post('/validate', array(
    'as' => 'validate',
    'uses' => 'MemberController@validateCredentials'
));

Във формуляра използвайте следното

<?php echo Form::open(array('route' => 'validate')); ?>
Коментари (0)
<?php echo Form::open(array('action' => 'MemberController@validateCredentials')); ?>

по подразбиране Form::open() предполага метод POST.

имате GET в маршрутите си. променете го на POST в съответния маршрут.

или ако искате да използвате метода GET, тогава добавете параметъра method.

напр.

Form::open(array('url' => 'foo/bar', 'method' => 'get'))
Коментари (0)