You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Nova中如何将选中记录($models)传递给domPDF生成视图?

解决Laravel Nova Action传递选中记录到domPDF视图的问题

问题核心是你调用Pdf::loadView()时没有把选中的$models集合传递给视图,只需给loadView方法补充数据参数即可解决。

修改方案:

  1. 传递数据到视图:给loadView添加第二个参数,将$models以关联数组形式传入,让视图能访问到选中的记录
  2. 优化PDF存储逻辑:用$pdf->output()替代download(),因为download()会生成下载响应头,output()仅返回纯PDF内容,更适合存储场景
  3. 修正视图路径: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 09:50:31