Laravel MethodNotAllowedHttpException

时间:2015-06-19 20:57:00

标签: php forms exception laravel request

我目前正在创建一个网站,一旦用户到达,他们就会受到一个表单的欢迎,他们用这个表单输入他们唯一的ID和DoB。输入信息并单击提交后,它们将被发送到主表单,其中只有一些信息,用户必须输入其余信息。当我尝试提交表单时出现问题,因为我一直收到以下错误:

at RouteCollection->methodNotAllowed(array('POST', 'PATCH'))

注意:我的路线中不需要任何变量。 (例如:我想要'形式/人'而不是'形式/ {person_id}')。另外,我只包含了有关错误的相关信息。

gate.blade.php - (这是用户输入身份证和出生日期的地方):

{!! Form::open(array('action' => 'JurorsController@form', 'class' => 'form-inline')) !!}

form.blade.php - (这是用户必须填写并提交的主要表单):

{!! Form::open(['url' => action('JurorsController@submit'), 'method' => 'PATCH', 'class' => 'form-inline']) !!}

routes.php文件:

Route::patch('jurors/form', 'JurorsController@submit');
Route::get('jurors', 'JurorsController@gate');
Route::post('jurors/form', 'JurorsController@form');

JurorController @提交

public function submit(FormSubmitRequest $request)
{
    //never reaches this point nor executes submit... instead redirects to gate IF it doesn't return 'MethodNotAllowedHttpException' error.
    dd($request);
}

我唯一一次设法让它没有向我显示'MethodNotAllowedHttpException'异常,而是被重定向到gate.blade.php页面。如果您对我有任何疑问或需要我做任何事情,请给我留言,我会尽快回复。

感谢。

1 个答案:

答案 0 :(得分:1)

在我看来,你的问题是我们路线中的网址。你正在重复它们。

首先,我建议使用命名路由,因为它会在路由之间给你更多的定义。我将您的路线改为

Route::put('jurors/submit',[
    'as' => 'jurors.submit',
    'uses' => 'JurorsController@submit'
]);

Route::get('jurors',[
    'as' => 'jurors.gate',
    'uses' => 'JurorsController@gate'
]);

Route::post('jurors/form', [
    'as' => 'jurors.form',
    'uses' => 'JurorsController@form'
]);

同样在您的提交路线上,您为什么要使用PATCH请求。你不会使用包含所有数据的POST请求吗?如果您仍然需要使用Patch,那么您应该在路线中使用put。 测试和调试的另一种方法是使用any查看是否是导致错误的HTTP请求

Route::any('jurors/submit',[
        'as' => 'jurors.submit',
        'uses' => 'JurorsController@submit'
    ]);

然后,您可以在form::open()中使用您的路线名称

{!! Form::open(array('route' => 'jurors.form', 'class' => 'form-inline')) !!}

希望这有帮助