나는 매우 기본적인 실행을 시도하고 있습니다. 나는 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
별도의로 GET
및 POST
경로.
새로운 경로 :
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'))
