laravel抛出MethodNotAllowedHttpException

我正在试图获得一些非常基本的运行。 我习惯了CI,现在正在学习Laravel 4,他们的文档并不容易! 无论如何,我正在尝试创build一个login表单,并确保通过将其打印到下一个表单中来成功发布数据。 我得到这个例外:

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有这样的forms方向:

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

任何帮助将不胜感激。

您正在获取该错误,因为您正在发送到GET路由。

我会分开你的路由“validation”到一个单独的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; } 

我的怀疑是问题在于你的路线定义。 您将路由定义为“获取”请求,但表单可能正在发送“发布”请求。 改变你的路线定义。

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

使用命名路由通常是更好的做法(如果控制器方法/类更改,则有助于缩放)。

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

在表格中使用以下内容

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

我也遇到了这个问题,这里的其他答案是有帮助的,但是我使用了一个Route::resource来处理GETPOST和其他请求。

在我的情况下,我离开了我的路线:

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

并简单地修改我的表单提交到我的FilesControllerstorefunction

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

这解决了这个问题,我认为这是值得指出作为一个单独的答案,因为各种其他答案build议添加一个新的POST路由。 这是一个选项,但没有必要。

问题是你正在使用POST,但实际上你必须执行PATCH来修复这个添加

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

在Form :: model行之后

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

默认情况下, Form::open()采用POST方法。

你已经进入你的路线。 将其更改为在相应path中发布。

或者如果你想使用get方法,那么添加method参数。

例如

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

我面对错误,
问题是FORM FORM

  {{Form :: open(array('url'=>'admin / doctor / edit /'.$ doctor-> doctor_id,'class'=>'form-horizo​​ntal form-b​​ordered form-row-stripped','method '=>'PUT','files'=> true))}}

它应该是这样的

  {{Form :: open(array('url'=>'admin / doctor / edit /'.$ doctor-> doctor_id,'class'=>'form-horizo​​ntal form-b​​ordered form-row-stripped','method '=>'POST','files'=> true))}}

我的问题不是我的路线设置不正确,而是我引用了错误的Form方法(我从一个不同的表单复制)。 我在做…

 {!! Form::model([ ... ]) !!} 

(没有指定模型)。 但我应该使用常规的open方法…

 {!! Form::open([ ... ]) !!} 

因为model的第一个参数需要实际的模型,所以没有得到我指定的选项。 希望这可以帮助那些了解他们路线的人是正确的,但是别的是不对的。

我也有同样的错误,但有一个不同的修复,在我的XYZ.blade.php我有:

“{!! Form :: open(array('url'=>'services.store'))!!}”,这给了我错误 – 我现在还不是为什么 – 但是当我改变它为“ {!! Form :: open(array('route'=>'services.store'))!!}“工作!

我认为这是值得分享:)

通常在使用的HTTP动词中存在错误,例如:使用POST请求调用PUT路由