Laravel中compact()报错:未定义变量$pesanan_details
Laravel compact(): Undefined variable $pesanan_details 问题解决
问题原因
执行PesananController的check_out方法时,代码仅在$pesanan不为空时定义$pesanan_details变量,当$pesanan为空时,该变量未初始化就通过compact传入视图,引发变量未定义错误;同时视图中直接遍历$pesanan_details,空数据场景下也会影响页面展示逻辑。
修复方案
1. 控制器代码修复
初始化$pesanan_details为空集合,确保无论$pesanan是否存在,变量都有合法值:
// 部分代码省略 public function check_out() { $pesanan = Pesanan::where('user_id', Auth::user()->id)->where('status',0)->first(); // 初始化空集合,避免变量未定义 $pesanan_details = collect(); if($pesanan) { $pesanan_details = PesananDetail::where('pesanan_id', $pesanan->id)->get(); } return view('checkout.check_out', compact('pesanan','pesanan_details')); } // 其余代码省略
也可以用更简洁的三元表达式写法:
public function check_out() { $pesanan = Pesanan::where('user_id', Auth::user()->id)->where('status',0)->first(); $pesanan_details = $pesanan ? PesananDetail::where('pesanan_id', $pesanan->id)->get() : collect(); return view('checkout.check_out', compact('pesanan','pesanan_details')); }
2. 视图代码优化
增加空数据判断,提升页面友好性:
{{-- 部分代码省略 --}} @if($pesanan_details->isNotEmpty()) @foreach ($pesanan_details as $pesanan_detail ) <tr> <td>{{ $no++ }}</td> <td>{{ $pesanan_detail->post->title }}</td> <td>{{ $pesanan_detail->jumlah }} Style</td> <td align="left">Rp. {{ number_format($pesanan_detail->post->harga) }}</td> <td align="left">Rp. {{ $pesanan_detail->jumlah_harga }}</td> <td> <form action="{{ url('check-out')}}/{{ $pesanan_detail->id }}" method="post"> @csrf {{ method_field('DELETE') }} <button type="submit" class="btn btn-danger btn-sm"><i data-feather="trash-2"></i></button> </form> </td> </tr> @endforeach @else <tr> <td colspan="6" align="center">暂无订单详情</td> </tr> @endif {{-- 其余代码省略 --}}
内容的提问来源于stack exchange,提问作者Daffa naufas Setiawan
相关产品推荐
相关产品推荐

