You need to enable JavaScript to run this app. Laravel框架删除购物车商品返回404错误问题排查咨询
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 09:36:04