Laravel 9 购物篮商品数量显示问题:Undefined variable $nbr 报错排查
问题原因分析
你遇到的Undefined variable $nbr错误,核心原因是控制器传递给视图的变量名和视图中使用的变量名不匹配。
看你的控制器代码:
return view('boutique.Boutique')->with('boutiques', $boutiques)->with('paniers', $nbr);
这里你把购物篮数量变量$nbr以paniers的名称传递给了视图,但在视图里你却尝试使用$nbr,视图自然找不到这个变量。
两种解决方案
方案1:修改控制器的变量传递名
把控制器里的with('paniers', $nbr)改成with('nbr', $nbr),让传递的变量名和视图中使用的一致:
public function AffichageBoutique() { $boutiques = Boutique::all(); $nbr = Panier::where('iduser', session('iduser'))->count(); // 这里修改变量名 return view('boutique.Boutique')->with('boutiques', $boutiques)->with('nbr', $nbr); }
或者用更简洁的compact语法,自动把变量名和值对应起来:
return view('boutique.Boutique', compact('boutiques', 'nbr'));
方案2:修改视图中的变量名
保持控制器的传递逻辑不变,把视图里的$nbr改成$paniers:
<div class="icon-wrapper"> <figure> <img src="/img/icons/bell_icon.svg" alt="" class="bell-icon"> <figcaption> <p>{{ $paniers }}</p> </figcaption> </figure> </div>
额外优化建议
- 优化查询性能:你现在用
get()->count()会先把符合条件的所有Panier记录取出来再计数,直接用count()方法可以让数据库层面完成计数,效率更高:
$nbr = Panier::where('iduser', session('iduser'))->count();
- 处理未登录场景:如果用户未登录,
session('iduser')可能为空,导致查询出错。如果你的项目用了Laravel的认证系统,建议用官方的认证方法更安全:
// 已登录用户取ID,未登录则数量为0 $nbr = auth()->check() ? Panier::where('iduser', auth()->id())->count() : 0;
内容的提问来源于stack exchange,提问作者Caroline Dorchies
相关产品推荐
相关产品推荐

