【问题标题】:The PUT method is not supported for this route. Supported methods: GET, HEAD此路由不支持 PUT 方法。支持的方法:GET、HEAD
【发布时间】:2020-04-20 19:00:36
【问题描述】:

我正在尝试学习 Laravel,并且正在学习一系列名为 laracast 的教程。我在episode 24,“提交 PUT 请求的表单。简短的故事是标记使用隐藏值将方法设置为 PUT,尽管表单方法设置为 POST。不过,当我这样做时,我从标题中获取错误信息:

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException 
The PUT method is not supported for this route. Supported methods: GET, HEAD.

从教程中,我希望 POST 也是一种受支持的方法。但是,当我尝试解决此问题时,我能找到的所有资源都只是告诉我我已经知道的内容。 PUT 不受支持,但我可以伪造/覆盖它,然后他们引用我已经完成的操作...还有其他原因导致我收到此错误消息吗?

HTML 表单:

 <form method="POST" action="/competition-categories">
                @csrf
                @method('PUT')

                <div class="form-group row">
                    <label for="competition-category-name-input" class="col-4 col-form-label">Name</label>
                    <div class="col-8">
                        <input id="competition-category-name-input" name="competition-category-name-input" type="text" class="form-control" required="required" value="{{ $competitionCategory->name }}">
                    </div>
                </div>
                <div class="form-group row">
                    <label for="competition-category-abbreviation-input" class="col-4 col-form-label">Abbreviation</label>
                    <div class="col-8">
                        <input id="competition-category-abbreviation-input" name="competition-category-abbreviation-input" type="text" class="form-control" required="required" value="{{ $competitionCategory->abbreviation }}">
                    </div>
                </div>
                <div class="form-group row">
                    <div class="offset-4 col-8">
                        <button name="submit" type="submit" class="btn btn-primary">Submit</button>
                    </div>
                </div>
            </form>

web.php sn-p:

//Competition Categories
Route::get('/competition-categories', 'CompetitionCategoryController@index');
Route::get('/competition-categories/create', 'CompetitionCategoryController@create');
Route::get('/competition-categories/{competitionCategory}', 'CompetitionCategoryController@show');
Route::get('/competition-categories/{competitionCategory}/edit', 'CompetitionCategoryController@edit');
Route::post('/competition-categories/{competitionCategory}', 'CompetitionCategoryController@store');
Route::put('/competition-categories/{competitionCategory}', 'CompetitionCategoryController@udpate');
Route::delete('/competition-categories/{competitionCategory}', 'CompetitionCategoryController@destroy');

来自控制器的片段:

public function update(Request $request, CompetitionCategory $competitionCategory)
{
    $competitionCategory->update($this->validateCompetitionCategory());

    return redirect()->route('competition-categories' , [$competitionCategory]);
}

【问题讨论】:

    标签: laravel routing


    【解决方案1】:

    您忘记了表单中的 id,这应该可以解决您的问题:

    action="/competition-categories/{{$competitionCategory->id}}"
    

    【讨论】:

    • 谢谢...总是在你看不到的地方...我自己应该能够做到这一点,但非常感谢!
    【解决方案2】:

    这种情况最常见的是您的缓存。当您添加新路线或更改路线中的某些内容时,请始终在 php artisan optimize 之后运行以刷新您的缓存。

    【讨论】:

      【解决方案3】:

      我建议使用命名路由以获取更多信息和消息,请参阅 =>

      https://laravel.com/docs/7.x/routing#named-routes

      【讨论】:

        猜你喜欢
        • 2019-12-29
        • 2020-04-03
        • 2020-05-27
        • 1970-01-01
        • 2020-01-23
        • 1970-01-01
        • 2020-12-06
        • 2020-02-16
        相关资源
        最近更新 更多