2012-12-20 2 views
2

예약 용 바우처로 pdf 문서를 생성 중입니다. 이제 요점은 고객이 여러 명을위한 방을 예약 할 수 있으므로 고객이 단일 쿠폰에 의존하지 않도록 두 개의 바우처가 있어야한다는 것입니다.Yii ePDF로 전자 메일로 여러 pdf 보내기

저는 mpdf와 html2pdf를 사용하는 Yii의 ePDF 확장을 사용하고 있습니다. 이것은 하나의 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

여러 첨부 파일의 경우 여러 개의 콘텐츠 섹션 만 있으면됩니다. 그렇지 않습니까? 현재 귀하의 이메일 내용은 어떻게 포맷되어 있습니까? 코드에 빈 문자열이 있습니까? – Paystey

답변

1

개인적으로 나는 sendMailWithPDF()에서 generatePDF() 기능을 분리한다. 기술적으로 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); 
} 

지금 코드가 정확히 작동하지 않을 수 있습니다,하지만 당신은 유연성을 추가 할 기능 디커플링에 의해 무슨 뜻인지의 아이디어를 얻을합니다 .

관련 문제