1

嗨,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::write 执行某种异步写入,当系统执行 Email::attachments 时,文件还没有准备好。

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

多谢。

4

2 回答 2

1
if($file->write( $viewdata ))
{
   return $path;
}
于 2013-03-28T08:56:40.483 回答
0

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

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

不强制打开文件对我有用。

于 2013-03-28T09:15:46.383 回答