[routing] laravel throwing MethodNotAllowedHttpException

나는 매우 기본적인 실행을 시도하고 있습니다. 나는 CI에 익숙하고 이제 Laravel 4를 배우고 있으며 그들의 문서는 쉽지 않습니다! 어쨌든 로그인 양식을 만들고 다음 양식에 인쇄하여 데이터가 성공적으로 게시되었는지 확인합니다. 이 예외가 발생합니다.

Symfony \ 구성 요소 \ HttpKernel \ 예외 \ 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별도의로 GETPOST경로.

새로운 경로 :

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

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

그런 다음 컨트롤러 방법은

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


답변

내 의심은 문제가 경로 정의에 있다는 것입니다.

경로를 GET요청 으로 정의 했지만 양식에서 POST요청을 보내는 중일 수 있습니다. 경로 정의를 변경하십시오.

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

일반적으로 명명 된 경로를 사용하는 것이 더 좋습니다 (컨트롤러 메서드 / 클래스가 변경되면 확장하는 데 도움이 됨).

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

양식에서 다음을 사용하십시오.

<?php echo Form::open(array('route' => 'validate')); ?>


답변

문제는 당신이 사용하고있는 것입니다 POST실제로 당신이 수행해야 할 PATCH
이 추가 문제를 해결하려면

<input name="_method" type="hidden" value="PATCH">

Form::model라인 바로 뒤에


답변

이는 get 메소드를 통해 데이터를 게시하기 때문입니다.

대신에

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

이 시도

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


답변

나뿐만 아니라이 문제가 발생하여 다른 답변 여기가 도움이되었다,하지만 난 사용하고 Route::resource을 담당하는 GET, POST및 기타 요청을.

제 경우에는 그대로 경로를 떠났습니다.

Route::resource('file', 'FilesController');

내 양식을 수정 store하여 내FilesController

{{ Form::open(array('route' => 'file.store')) }}

이로 인해 문제가 해결되었으며 다양한 다른 답변이 새로운 POST경로 추가를 제안하기 때문에 별도의 답변으로 지적 할 가치가 있다고 생각했습니다 . 이것은 옵션이지만 필요하지 않습니다.


답변

일반적으로 다음과 같은 MethodNotAllowedHttpException경우에 발생합니다.

경로 방법이 일치하지 않습니다.

POST요청 라우트 파일 을 정의 했지만 라우트로 GET요청을 보낸다고 가정하십시오 .


답변

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

기본적 Form::open()으로 POST메서드를 가정합니다 .

당신은 GET당신의 경로에 있습니다. POST해당 경로에서로 변경하십시오 .

또는 GET메소드 를 사용 하려면 method매개 변수 를 추가하십시오 .

예 :

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