2

我正在生成带有预订凭证的 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 的电子邮件。我本来想建一个数组,但一开始我想问你们,你们对如何正确处理这个问题有什么看法?

提前致谢,

4

1 回答 1

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);
}

现在代码可能无法完全按照我根据您的系统编写的那样工作,但是您应该通过解耦函数以增加灵活性来了解我的意思。

于 2012-12-21T14:44:29.280 回答