1

我在前端有带有 Vue 的 Laravel 应用程序,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!']);
}

所以很自然地,我得到了一个方法不允许的异常,因为它正在重定向到一个应该只获得前一个视图的路由。

路由本身很好,请求方法不是。

对于非信徒:)

在此处输入图像描述

还有一条路线:

在此处输入图像描述

4

3 回答 3

1

我知道这有点晚了。但是以防有人偶然发现这一点。

您声明您在前端使用 Vue。这表明 put 请求是通过 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 如何处理补丁请求有关,它似乎试图自动处理重定向响应,但我可能是错的,所以如果有更好的解释,欢迎任何回复。

于 2021-03-24T12:53:47.547 回答
0

您可以使用:

redirect()->back(303)->with(...)
于 2021-08-31T08:54:37.583 回答
-2

不,重定向总是用GET但你没有定义这样的路由。因此,您应该创建GET可以对此进行处理的路线。

只能重定向到GET路由。

于 2017-11-20T19:30:27.103 回答