Laravel 9使用laravelshoppingcart出现Undefined array key 'prix_ttc'错误
解决Laravel 9中laravelshoppingcart包「Undefined array key 'prix_ttc'」错误
在Laravel 9项目中使用darryldecode/laravelshoppingcart包实现购物车小计功能时,参考Laravel 5.6的教程后出现「Undefined array key 'prix_ttc'」错误,以下是具体原因分析和解决办法:
原因分析
问题核心在于旧版本教程的API与当前适配Laravel 9的包版本不兼容:Laravel 5.6时期的包版本中,购物车项的attributes是以数组形式存储的,但新版本包中attributes已改为对象类型,直接用数组键名访问会导致未定义错误。此外,若购物车存在未包含prix_ttc属性的旧缓存数据,也会触发该错误。
解决步骤
1. 确保包版本适配Laravel 9
先确认安装的laravelshoppingcart包版本支持Laravel 9,执行以下命令更新到最新兼容版本:
composer require darryldecode/laravelshoppingcart
2. 修改视图中属性的访问方式
将视图里数组形式的属性访问改为对象的get()方法:
原视图代码:
<td> {{ $produit->attributes['prix_ttc'] }} € </td> <td> {{ number_format($produit->attributes['prix_ttc'] * $produit->quantity,2)}} € </td>
修改后:
<td> {{ $produit->attributes->get('prix_ttc') }} € </td> <td> {{ number_format($produit->attributes->get('prix_ttc', 0) * $produit->quantity, 2) }} € </td>
注:添加第二个参数0作为默认值,可避免因属性缺失再次报错
3. 清空购物车缓存
由于之前添加的商品未包含prix_ttc属性,需清空现有购物车数据,可临时在控制器中添加以下代码执行一次:
Cart::destroy();
执行后即可移除旧缓存数据,之后添加的商品会正确携带prix_ttc属性。
内容的提问来源于stack exchange,提问作者kr.Nada
相关产品推荐
相关产品推荐

