更新后的Laravel重定向使用PUT请求

时间:2017-11-20 19:26:06

标签: php laravel laravel-5 laravel-request laravel-response

我在前端有Vue的Laravel应用程序,Vue使用PUT请求从控制器调用update方法。

请求有效,模型会更新,但我有重定向问题,因为它重定向也是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!']);
}

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

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

对于非信徒:)

enter image description here

也是一条路线:

enter image description here

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

不,始终使用GET进行重定向,但您没有定义此类路线。所以你应该创建GET路由来做这件事。

只能重定向到GET路线。