Метод PUT не поддерживается для этого маршрута. Поддерживаемые методы: GET, HEAD - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь выучить Laravel, и я следую серии уроков под названием laracast. Я нахожусь в эпизоде ​​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>

веб. php фрагмент:

//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]);
}

Ответы [ 3 ]

3 голосов
/ 20 апреля 2020

Вы забываете идентификатор в форме, это должно решить вашу проблему:

action="/competition-categories/{{$competitionCategory->id}}"
0 голосов
/ 20 апреля 2020

Я рекомендую использовать named-маршруты для получения дополнительной информации и сообщений см. =>

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

0 голосов
/ 20 апреля 2020

Чаще всего это происходит в вашем кеше. Когда вы добавляете новый маршрут или что-то изменяете в своих маршрутах, всегда запускайте после php artisan optimize, чтобы обновить sh ваш кеш.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...