【问题标题】:Laravel MethodNotAllowedHttpExceptionLaravel MethodNotAllowedHttpException
【发布时间】:2015-06-19 20:57:00
【问题描述】:

我目前正在创建一个网站,一旦用户到达,他们就会看到一个输入他们唯一 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 页面。如果您对我有任何问题或需要我澄清任何事情,请给我留言,我会尽快回复。

谢谢。

【问题讨论】:

    标签: php forms exception laravel request


    【解决方案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')) !!}
    

    希望对你有帮助

    【讨论】:

    • 太棒了,我将在星期一访问该项目时尝试一下。我需要仔细阅读 PATCH 究竟是什么,因为它显然不是我想的那样。
    • 我发现我的问题的主要来源甚至与路线无关,而是与表单规则有关。无论如何,我现在设置了 put 方法,并使用与表单本身完全相同的路由路径(post = put = 'jurors/form')。
    • 我终于找到了问题的根源:我连续发了两次。我的意思是,gate 是一个 post 请求,而 form after 也是一个 form 请求。尝试使用任何 $request 规则应用于字段会导致方法 notallowedhttpexception。
    猜你喜欢
    • 2019-04-15
    • 2013-07-04
    • 2015-09-11
    • 2017-12-21
    • 2018-02-28
    • 2016-08-31
    • 2018-01-13
    • 2013-09-18
    • 2015-08-30
    相关资源
    最近更新 更多