我正在制作带有优惠券的pdf文件进行预订。现在重点是客户可以为多人预订房间,因此应该有两张优惠券,因此顾客不依赖于单张优惠券。
我正在使用Yii的ePDF扩展,它使用mpdf和html2pdf。这是我生成单个pdf的代码:
//foreach voucher generate a pdf
foreach($rhrs as $rhr) {
$this->generatePDF($reservation, $rhr);
}
生成pdf函数:
private function generatePDF($reservation, $rhr)
{
$pdf = Yii::app()->ePdf->mpdf('','', 0, '', 0, 0, 0, 0, 0, 0, 'P');
$pdf->WriteHTML( $this->renderPartial('voucher', array(
'rhr'=>$rhr,
'reservation'=>$reservation
), true) );
$this->sendMailWithPDF($pdf, $reservation);
}
sendmailWithPDF函数:
private function sendMailWithPDF($pdf, $reservation)
{
$content = $pdf->Output('', 'S');
$content = chunk_split(base64_encode($content));
$mailto = $reservation->emailaddress;
....
$is_sent = @mail($mailto, $subject, "", $header);
问题是这会发送多封电子邮件,其中包含一个pdf。我正在尝试发送一封包含多个pdf的电子邮件。我正在考虑建立一个阵列,但起初我想问你们,那么你对如何妥善处理这个问题有什么看法?
提前致谢,
答案 0 :(得分:1)
就个人而言,我会将generatePDF()
功能与sendMailWithPDF()
分离,以便您可以单独调用它们。从技术上讲,你没有必要发送电子邮件来生成PDF。
如果你的generatePDF()
函数只是返回了PDF对象,你可以创建一个数组,然后传入你的sendMailWithPDF()
函数。
这样的事情:
//foreach voucher generate a pdf
$generatedPDFs = array();
foreach($rhrs as $rhr) {
$generatedPDFs[] = $this->generatePDF($reservation, $rhr);
}
// Call the mail function outside of the pdf generator, but pass in the array instead
$this->sendMailWithPDF($generatedPDFs, $reservation);
private function generatePDF($reservation, $rhr)
{
$pdf = Yii::app()->ePdf->mpdf('','', 0, '', 0, 0, 0, 0, 0, 0, 'P');
$pdf->WriteHTML( $this->renderPartial('voucher', array(
'rhr'=>$rhr,
'reservation'=>$reservation
), true) );
return $pdf;
}
private function sendMailWithPDF($pdf, $reservation)
{
//Update this section to handle $pdf being an array
$content = $pdf->Output('', 'S');
$content = chunk_split(base64_encode($content));
$mailto = $reservation->emailaddress;
....
$is_sent = @mail($mailto, $subject, "", $header);
}
现在代码可能无法完全按照我基于您的系统编写的方式工作,但您应该通过解耦函数来增加灵活性来了解我的意思。