2016-02-18 2 views
0

Я создаю отчет в формате PDF и добавляю его в качестве прикрепленного к электронной почте. Я использую расширение tcpdf и использую структуру Yii. Я сомневаюсь, где разместить код для создания pdf. Я могу добавить его в код контроллера непосредственно перед отправкой электронной почты, но я хочу создать отдельную функцию, которая при вызове генерирует PDF-файл и сохраняет его на диск.Отделив модуль генерации PDF в Yii

Вот мой пример кода

   $transaction->commit(); 



         $mail = Yii::app()->Smtpmail; 
         $mail->IsSMTP(); 
         $mail->IsHTML(true);         

         $mail->SetFrom("[email protected]", 'XXX Admin'); 
         //$headers = "Content-Type: text/html; charset=UTF-8"; 

         $mail->Subject = "Confirmation of survey completion"; 
         $mail->MsgHTML("Hi $survey->first_name $survey->last_name, <br><br>Thank you for completing the survey. The details of your survey result will be sent to the leader. <br><br>Please contact the leader for further details.<br><br>Regards,<br>Admin, XXX"); 


         $mail->AddAddress("[email protected]", ""); 
         $mail->CharSet = 'UTF-8'; 
         //to invoke another controller/component to generate pdf here 
         $controller1 = new PdfReportController("test"); 
         $controller1->actionEnglishReport(); 
         $dir = realpath(__DIR__ . '/../runtime/pdf-assets'); 
         $file = $dir . '/export.pdf'; 
         $mail->AddAttachment($file); 
         if(!$mail->Send()) 
         { 
           Yii::log("Mailer Error: " . $mail->ErrorInfo, 'error','application'); 
         } 
         else 
         { 
          Yii::log('Data1 saved!. Mail sent', 'info','application'); 
         } 

Я не очень четкое представление о том, как отделить этот модуль генерации PDF. Пожалуйста, помогите

Update: мне удалось отделить модуль в формате PDF, как это:

    //Pdfreports is a component class which has MandarinReport   as a static method 
       PdfReports::MandarinReport(); 
       $dir = realpath(__DIR__ . '/../runtime/pdf-assets'); 
       $file = $dir . '/export.pdf'; 
       $mail->AddAttachment($file);      

Проблема хотя Pdf создается, электронная почта с приложением не послал

ответ

0

я предлагаю вам взгляните на шаблон MVC, который использует Yii. http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc

шаблон MVC широко используется для разработки графических интерфейсов и разделяет обязанности кода в трех разных слоях, если вы посмотрите здесь (https://en.wikipedia.org/wiki/Model -view-controller # Interactions) вы можете видеть, что контроллер может отправлять команды только для обновления состояния модели или просмотра

В Yii контроллер никогда не должен создаваться. это то, что Yii будет обрабатывать для вас. его не совсем понятно, где ваш пример кода выполняется, но вы можете создать компонент Yii (http://www.yiiframework.com/doc/guide/1.1/en/basics.component) для отправки сообщений электронной почты и порождающая PDF в

class mailer extends CComponent{ 

    public static function sendMail($model){ 
     // You're mail code 
     return $mail->send(); // return true the mail is send 
    } 

    public static function generatePDF($model){ 
     // You're mail code 
     return $pdf->path; //return the path where the pdf is saved 
    } 
} 

Вы могли бы, однако взглянуть на Yii событий и поведения, но это немного более сложным. (http://www.yiiframework.com/wiki/44/behaviors-events/ & http://www.yiiframework.com/doc/guide/1.1/en/basics.component#component-event)

Для хранения вы Pdf вы можете использовать менеджер юй актива http://www.yiiframework.com/wiki/148/understanding-assets/

Причина, почему почта не послать может быть по ряду причин, проверьте журнал приложений во время выполнения на наличие ошибок ,

Смежные вопросы