Laravel domPDF报错:尝试在布尔值上读取属性"judul_khotbah"
解决Laravel单条讲道数据PDF打印报错及空白问题
问题根源
- 报错
Attempt to read property "judul_khotbah" on bool:Khotbah::find($id_khotbah)在找不到对应ID的记录时会返回布尔值false(或null),原视图用@foreach循环这个非集合/数组的变量,遍历过程中尝试读取布尔值的属性导致报错。 - 添加判断后仍空白:
count((array) $khotbah)对false或null转数组后长度为0,判断不成立,因此不执行循环,PDF输出空白页面。
解决方案
1. 修正控制器代码
确保传递给视图的是有效模型实例,同时处理数据不存在的场景:
public function generatePdf(Request $request, $id_khotbah) { // 找不到记录时直接返回404,避免无效值传入视图 $khotbah = Khotbah::findOrFail($id_khotbah); $pdf = Pdf::loadView('dashboard.khotbahPdf', compact('khotbah')); return $pdf->download('RingkasanKhotbah.pdf'); }
如果不想返回404,可手动处理无数据情况:
public function generatePdf(Request $request, $id_khotbah) { $khotbah = Khotbah::find($id_khotbah); // 无数据时返回提示或跳转 if (!$khotbah) { return redirect()->back()->with('error', '讲道数据不存在'); } $pdf = Pdf::loadView('dashboard.khotbahPdf', compact('khotbah')); return $pdf->download('RingkasanKhotbah.pdf'); }
2. 修正Blade视图代码
因为是单条数据,无需使用@foreach循环,直接读取模型属性并添加存在判断:
<body> @if($khotbah) <div class="book"> <div class="page"> <div class="subpage"> <h1>Judul Khotbah : {{ $khotbah->judul_khotbah }}</h1> <h5>Tanggal : {{ $khotbah->tanggal_khotbah }}</h5> <h5>Pembicara : {{ $khotbah->pembicara }}</h5> <br> <p>{{ $khotbah->isi_khotbah }}</p> </div> </div> </div> @else <div class="book"> <div class="page"> <div class="subpage"> <p>讲道数据不存在</p> </div> </div> </div> @endif </body>
注:视图中的@method('put')和@csrf是表单提交专用代码,PDF打印页面无需保留,建议移除。
内容的提问来源于stack exchange,提问作者Joshia Agrisa Anrhiely Luther
相关产品推荐
相关产品推荐

