Laravel Nova中如何将选中记录($models)传递给domPDF生成视图?
解决Laravel Nova Action传递选中记录到domPDF视图的问题
问题核心是你调用Pdf::loadView()时没有把选中的$models集合传递给视图,只需给loadView方法补充数据参数即可解决。
修改方案:
- 传递数据到视图:给
loadView添加第二个参数,将$models以关联数组形式传入,让视图能访问到选中的记录 - 优化PDF存储逻辑:用
$pdf->output()替代download(),因为download()会生成下载响应头,output()仅返回纯PDF内容,更适合存储场景 - 修正视图路径:Laravel加载视图时无需带
.blade.php后缀,直接写pdf.attendance即可
修改后的完整handle方法代码:
public function handle(ActionFields $fields, Collection $models) { // 将选中的记录集合传递到视图,视图中通过$attendances变量访问 $pdf = Pdf::loadView('pdf.attendance', ['attendances' => $models]); // 获取PDF纯内容并存储到指定路径 Storage::put('public/PDF/Attendances.pdf', $pdf->output()); return Action::download(asset('storage/PDF/Attendances.pdf'), 'Asistencias.pdf'); }
在PDF视图中使用数据:
在resources/views/pdf/attendance.blade.php里,直接遍历传递过来的$attendances集合即可:
<h1>选中的考勤记录</h1> <table> <thead> <tr> <th>ID</th> <th>姓名</th> <!-- 根据你的模型字段添加表头 --> </tr> </thead> <tbody> @foreach($attendances as $attendance) <tr> <td>{{ $attendance->id }}</td> <td>{{ $attendance->name }}</td> <!-- 输出模型其他字段内容 --> </tr> @endforeach </tbody> </table>
额外优化:如果不想每次生成的PDF覆盖旧文件,可以用时间戳或模型ID组合生成唯一文件名:
$fileName = 'Attendances_' . time() . '.pdf'; Storage::put("public/PDF/{$fileName}", $pdf->output()); return Action::download(asset("storage/PDF/{$fileName}"), "Asistencias_{$fileName}");
内容的提问来源于stack exchange,提问作者TaM
相关产品推荐
相关产品推荐

