我在前端有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!']);
}
很自然地,我得到一个方法不允许异常,因为它重定向到一个应该只获得前一个视图的路由。
路由本身很好,请求方法不是。
对于非信徒:)
也是一条路线:
答案 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
路线。