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
相关产品推荐
相关产品推荐

