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 に答える