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
来处理GET
, POST
和其他请求。
在我的情况下,我离开了我的路线:
Route::resource('file', 'FilesController');
并简单地修改我的表单提交到我的FilesController
的store
function
{{ 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-horizontal form-bordered form-row-stripped','method '=>'PUT','files'=> true))}}
它应该是这样的
{{Form :: open(array('url'=>'admin / doctor / edit /'.$ doctor-> doctor_id,'class'=>'form-horizontal form-bordered 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路由