当前位置: 首页 > 知识库问答 >
问题:

cakephp-保存文件同步并作为附件发送

秦胡媚
2023-03-14

大家好,cakephp中的File::write()有一个奇怪的问题。

我编写这段代码是为了生成pdf视图并将其保存在文件中。

private function generate( $id ){

    $order = $this->Order->read( null, $id );
    $this->set('order', $order);

    $view = new View($this);

    $viewdata = $view->render('pdf');

    //set the file name to save the View's output
    $path = WWW_ROOT . 'ordini/' . $id . '.pdf';
    $file = new File($path, true);

    //write the content to the file
    $file->write( $viewdata );

    //return the path
    return $path;

}

我需要生成这个pdf并将其作为附件发送,这是我的代码

public function publish ($id) {
    $pdf_file = $this->generate( (int)$id );

    $Email = new CakeEmail();
    $Email->from(array('info@.....com' => '......'));
    $Email->to('....@gmail.com');
    $Email->subject('Nuovo ordine');

    $filepath = WWW_ROOT . 'ordini/' . $id . '.pdf';

    $Email->attachments(array('Ordine.pdf' => $filepath));

    $Email->send('......');

}

我第一次运行这段代码时,电子邮件不起作用,只有当文件夹中的pdf文件已经存在时,电子邮件才起作用。

我认为File::写执行某种异步写入,当系统执行电子邮件::attachments文件in不准备。

如何在此代码中插入while()来检查文件的可用性?

谢谢。

共有2个答案

乐正远航
2023-03-14

使用返回值是不够的。我改了这条线

$file = new File($path, false);

不强制打开文件对我来说很有效。

阎兴为
2023-03-14
if($file->write( $viewdata ))
{
   return $path;
}
 类似资料:
  • 我正在使用TCPDF库在我的CakePHP应用程序中创建发票。如果我转到,我的view.ctp包括在浏览器中生成和显示pdf的代码。我想添加发送PDF作为电子邮件附件的能力,所以我创建了动作,并将代码从view.ctp复制到电子邮件模板中。 现在我被卡住了,我不知道如何在附加PDF之前先生成它。在我的view.ctp页面模板的末尾,我使用 它将pdf发送到浏览器中查看,而不创建文件。如果使用“F”

  • 我试图从Firefox中的新MediaRecorderAPI发送一个Blob到NodeJS以将其存储在文件中。Blob包含转换为webm-file的记录。我在发送之前将这个Blob分成一定的大小,以便能够通过webrtc数据通道提供的带宽发送它。这个看起来像这样: 在nodeJS方面,我试图将数据转换回webm文件,就像这样: 它告诉我,块被写入,但是文件是空的。我尝试了从blob派生的bas64

  • 我正在用cakephp开发一个应用程序,我需要在其中生成一个pdf并将其作为电子邮件附件发送。我已经能够使用dompdf创建pdf视图,但我不知道如何将其保存为文件并以电子邮件附件的形式发送。请告诉我如何做到这一点。

  • 我想用mailto标签发送电子邮件,附带一个pdf文件作为附件。mailto标记使用以下方法打开邮件窗口,其中包含传递的参数,如to和subject: 但是,附件作为一个参数不起作用。请建议如何在手机中发送pdf附件。 谢啦

  • 并在config/bootstrap.php中添加了以下行: 在config/events.php中 在lib/event/mylistener.php中 PS:我使用Cakephp事件是因为它允许我在一个地方从不同的控制器收集所需的数据,然后从那里,我可以创建事件流(服务器发送的事件)。如果有更好的选择,请分享。

  • 我正在使用Apache Camel 2.22.0,并且有一个简单的路由,即发送电子邮件(带有一些属性引用): 我希望得到的是一封普通的电子邮件,邮件正文中包含来自Velocity模板的文本。我实际收到的是一封电子邮件,其中附有Velocity模板中的文本。在MS Outlook中看起来是这样的: 为什么是附件?如何让邮件组件将Velocity模板的结果直接插入到电子邮件正文中? 更新: 通过打开邮