Laravel MethodNotAllowedHttpException

Laravel MethodNotAllowedHttpException

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

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

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

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

{!! 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@submit

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 页面。如果您对我有任何疑问或需要我澄清任何事情,请给我留言,我会尽快回复。

谢谢。

在我看来,您的问题是我们路线中的 url。你在重复它们。

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

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')) !!}

希望对您有所帮助