Перенаправление Laravel после обновления использует запрос PUT

У меня есть приложение Laravel с Vue на переднем конце, и Vue вызывает метод обновления из контроллера с помощью PUT запрос.

Запрос работает, модель обновляется, но у меня есть проблема с перенаправлением, так как оно перенаправляется также как PUT вместо простого GET?

public function update(MomentsValidationRequest $request, Project $project, Task $task, Moment $moment)
{
    foreach($request->materials as $material){
        $material_id_array[$material['id']] = ['quantity' => $material['quantity']];
    }

    $moment->update($request->all());

    if(isset($material_id_array))
        $moment->materials()->sync($material_id_array);

    return redirect()->back()->with(['alert-type' => 'success', 'message' => 'Moment updated!']);
}

Естественно, я получаю исключение метода, которому не разрешено, потому что он перенаправляет на маршрут, который должен получить только предыдущее представление.

Сам по себе маршрут в порядке, метод запроса - нет.

Для неверующих:)

Также маршрут:

3 ответа

Я знаю, что это немного поздно. Но на случай, если кто-нибудь наткнется на это.

Вы заявляете, что используете Vue во внешнем интерфейсе. Это предполагает, что запрос на размещение выполняется через вызов axios.

Я не вижу этого звонка, поэтому это только предположение. Но я считаю, что решением было бы вернуть объект json вместо ответа в контроллере, а затем перенаправить триггер перенаправления из самого компонента Vue.

В контроллере:

      Session::flash('alert-type', 'success');
Session::flash('message', 'Moment updated!');

return response()->json(true);

В компоненте:

      axios.post('/moments', this.moment).then(() => {
    window.location.replace("moments");
});

Я считаю, что это как-то связано с тем, как axios обрабатывает запросы на исправление, похоже, он пытается автоматически обрабатывать ответ перенаправления, хотя я могу ошибаться, поэтому любой ответ приветствуется, если есть лучшее объяснение.

Вы можете использовать:

      redirect()->back(303)->with(...)

Нет, перенаправление выполняется всегда с GET но вы не определили такой маршрут. Так что вы должны создать GET маршрут, который будет делать что-то с этим.

Можно только перенаправить на GET маршруты.

Другие вопросы по тегам