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

Laravel mPDF邮件附件报错:传入字符串而非Closure类型问题排查

Laravel邮件附件报错:Illuminate\Mail\Attachment::fromData() 参数类型问题

什么是Closure类型

Closure就是PHP里的匿名函数——没有固定函数名、可以灵活传递的函数。Laravel设计fromData()用它做参数,是为了延迟生成文件内容,避免提前把大文件内容加载到内存里,提升性能。

错误原因:确实和$pdf->output()有关

你直接传$pdf->output()的返回值(字符串类型)给fromData(),但这个方法要求第一个参数必须是Closure类型,所以才会报类型不匹配的错误。

修复代码示例

把PDF生成逻辑放到匿名函数里传给fromData()就行:

public function attachments()
{
    $pdf = new \Mpdf\Mpdf();
    $pdf->WriteHTML('<h1>你的PDF内容</h1>');

    return [
        \Illuminate\Mail\Attachment::fromData(function () use ($pdf) {
            // 在匿名函数里生成PDF内容
            return $pdf->output();
        }, '附件文件名.pdf')
            ->withMime('application/pdf'), // 指定MIME类型
    ];
}

这里的use ($pdf)是把外部的$pdf变量引入到匿名函数内部,确保能正常调用生成PDF的方法。

内容的提问来源于stack exchange,提问作者Emmanuel Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:33:08