如何解决production.ERROR: Cannot use string offset as an array购物车报错
问题解决方法
1. 修复代码语法错误
你的代码中数组定义处存在明显语法错误:
$cart[$id] = [. // 此处多余的点是错误根源之一
需修改为:
$cart[$id] = [
2. 确保Session中cart为数组类型
报错Cannot use string offset as an array的核心原因是:当前Session存储的cart不是数组,而是字符串类型(可能之前误将字符串存入了cart会话)。
临时修复方案
先清除错误的会话数据,执行以下操作后重新测试:
session()->forget('cart');
永久防护方案
在获取cart会话后添加类型校验,确保其始终为数组:
$cart = session()->get('cart', []); // 强制转为数组,避免非数组数据导致报错 if (!is_array($cart)) { $cart = []; }
3. 完整修正后的代码
public function addBooktoCart($id) { $book = Transactions::findOrFail($id); $cart = session()->get('cart', []); // 确保cart是数组类型 if (!is_array($cart)) { $cart = []; } if (isset($cart[$id])) { $cart[$id]['quantity']++; } else { $cart[$id] = [ "name" => $book->title, "quantity" => 1, "price" => $book->price, "image" => $book->file ]; } session()->put('cart', $cart); return redirect()->back()->with('success', 'Book has been added to cart!'); }
内容的提问来源于stack exchange,提问作者olawole taiwo
相关产品推荐
相关产品推荐

