分离Yii中的pdf生成模块
Separating the pdf generation module in Yii
我正在生成 pdf 报告并将其作为电子邮件附件添加。我正在使用 tcpdf 扩展并使用 Yii 框架。我的疑问是我在哪里放置代码来生成 pdf。我可以在发送电子邮件之前将它添加到控制器代码中,但我想创建一个单独的函数,该函数在调用时生成 pdf 并将其保存到磁盘。
这是我的示例代码
$transaction->commit();
$mail = Yii::app()->Smtpmail;
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->SetFrom("do-not-reply@abc.com", '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("abc@gmail.com", "");
$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生成模块。请帮助
更新:
我设法像这样分离 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,但没有发送带有附件的电子邮件
我建议你看看Yii使用的MVC模式http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc
MVC 模式广泛用于开发 GUI 并将代码的职责分隔在三个不同的层中,如果您查看此处 (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,您可以使用 yii 资产管理器 http://www.yiiframework.com/wiki/148/understanding-assets/
邮件未发送的原因可能有多种,请在运行时检查应用程序日志是否有错误。
我正在生成 pdf 报告并将其作为电子邮件附件添加。我正在使用 tcpdf 扩展并使用 Yii 框架。我的疑问是我在哪里放置代码来生成 pdf。我可以在发送电子邮件之前将它添加到控制器代码中,但我想创建一个单独的函数,该函数在调用时生成 pdf 并将其保存到磁盘。
这是我的示例代码
$transaction->commit();
$mail = Yii::app()->Smtpmail;
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->SetFrom("do-not-reply@abc.com", '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("abc@gmail.com", "");
$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生成模块。请帮助
更新: 我设法像这样分离 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,但没有发送带有附件的电子邮件
我建议你看看Yii使用的MVC模式http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc
MVC 模式广泛用于开发 GUI 并将代码的职责分隔在三个不同的层中,如果您查看此处 (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,您可以使用 yii 资产管理器 http://www.yiiframework.com/wiki/148/understanding-assets/
邮件未发送的原因可能有多种,请在运行时检查应用程序日志是否有错误。