Laravel框架删除购物车商品返回404错误问题排查咨询
问题原因及修复方案
你一共存在2个核心错误导致404,还有1处逻辑风险需要优化:
1. 路由参数语法错误
你的路由定义中参数多写了$符号,Laravel路由参数不需要加$前缀:
错误写法
Route::post('cart/delete/{$id}', [CartEcommerceController::class,'deleteItemCart'])->name('cart.cartDelete');
正确写法
Route::post('cart/delete/{id}', [CartEcommerceController::class,'deleteItemCart'])->name('cart.cartDelete');
2. 请求方法不匹配
你路由定义的是POST类型请求,但视图中用的是普通<a>标签跳转,<a>标签默认发送GET请求,和路由规则不匹配导致404。
有两种修复方案可选:
方案A(推荐,符合操作规范):保持POST路由,改视图为表单提交
把视图中删除列的a标签替换为POST表单:
<td> <form action="{{ route('cart.cartDelete', $id) }}" method="POST" class="d-inline"> @csrf <button type="submit" class="btn btn-link p-0">Cancella</button> </form> </td>
方案B(简易快速):改路由为GET类型
直接调整路由的请求方法:
Route::get('cart/delete/{id}', [CartEcommerceController::class,'deleteItemCart'])->name('cart.cartDelete');
3. 控制器逻辑优化(可选,避免报错)
你当前控制器直接访问$cart[$id],如果购物车中不存在对应ID的商品,会抛出数组下标不存在的错误,优化后代码:
public function deleteItemCart($id){ $cart = Session()->get('cart', []); // 先判断商品是否存在 if(isset($cart[$id])){ unset($cart[$id]); session()->put('cart', $cart); if (count($cart) == 0) { session()->forget('cart'); } } return redirect()->back(); }
内容的提问来源于stack exchange,提问作者alessio scionti
相关产品推荐
相关产品推荐

