Laravel编辑用户支付信息后跳转报GET方法不支持POST错误
问题根因
Laravel的redirect()->route()方法生成的跳转响应,浏览器接收后会默认以GET请求访问目标路由,而你定义的carrito路由仅支持POST方法,因此触发方法不匹配的报错。
解决方法
方案1:调整路由请求方法(推荐,符合RESTful规范)
购物车展示页属于数据查询场景,本身就应该用GET方法,直接修改路由定义即可:
// 将原有的Route::post改为Route::get Route::get('carrito/{user}', function ($userId) { $user = User::find($userId); return view('carrito')->with([ 'user' => $user ]); })->name('carrito');
如果该路由同时需要支持POST提交其他数据的场景,可以配置为支持多种请求方法:
Route::match(['get', 'post'], 'carrito/{user}', function ($userId) { // 原有逻辑保持不变 })->name('carrito');
方案2:编辑完成后直接返回视图
如果不想修改路由定义,也可以在edit方法保存数据后,直接渲染carrito视图,无需走跳转逻辑:
public function edit(Request $request, $userId) { // 原有保存用户数据的逻辑保持不变 $user = User::findOrFail($userId); $user->name = isset($request->userName) ? $request->userName : $user->name; $user->lastNames = isset($request->userLastNames) ? $request->userLastNames : $user->lastNames; $user->email = isset($request->userEmail) ? $request->userEmail : $user->email; $user->phoneNumber = isset($request->userPhoneNumber) ? $request->userPhoneNumber : $user->phoneNumber; $user->role = isset($request->userRole) ? $request->userRole : $user->role; $user->preferPayMethod = isset($request->preferPayMethod) ? $request->preferPayMethod : $user->preferPayMethod; $user->save(); // 替换原有跳转逻辑,直接返回视图 return view('carrito')->with([ 'user' => $user ]); }
该方案可以避免重复请求路由,还能减少一次302跳转开销,适合不需要在地址栏显式展示carrito路由的场景。
内容的提问来源于stack exchange,提问作者alexdevs
相关产品推荐
相关产品推荐

