十月 CMS - DynamicPDF 插件失败

October CMS - DynamicPDF plugin fails

我安装了 Renatio 的 DynamicPDF 插件以生成 PDF 作为附件 在电子邮件中。
但是我无法让它工作。

use Renatio\DynamicPDF\Classes\PDF; // import facade

  ...

$temp_file = tempnam(sys_get_temp_dir(), 'inv');
PDF::loadTemplate('renatio::invoice')->save($temp_file);

Mail::send('acme.blog::mail.welcome', $data, function ($message) {
    $message->attach($temp_file, ['as' => 'Your_Invoice.pdf']);
});

我一直收到同样的错误

No query results for model [Renatio\DynamicPDF\Models\Template]

有人可以帮助我吗?

更新 // 这是我的代码

<?php namespace Codalia\Membership\Helpers;

use October\Rain\Support\Traits\Singleton;
use Renatio\DynamicPDF\Classes\PDF; // import facade
use Codalia\Membership\Models\Member;

   ...

class EmailHelper
{
    use Singleton;

   ...

    public function payment($recordId, $data)
    {
        $member = Member::find($recordId);
        $vars = ['first_name' => $member->first_name,
                 'last_name' => $member->last_name,
                 'amount' => $data['amount'],
                 'item' => $data['item'],
                 'payment_mode' => $data['mode'],
        ];

        $temp_file = tempnam(sys_get_temp_dir(), 'inv');
        PDF::loadTemplate('renatio::invoice-membership', $vars)->save($temp_file);

        Mail::send('codalia.membership::mail.payment_email, $vars, function($message) use($member, $temp_file) {
            $message->to($member->email, 'Admin System');
            $message->subject(Lang::get('codalia.membership::lang.email.payment_subject));
            $message->attach($temp_file, ['as' => 'Your_Invoice.pdf']);
        });
      }

   ...

}

您需要将 $temp_file 传递给函数才能使用它


    Mail::send('acme.blog::mail.welcome', $data, function ($message) use($temp_file) {
        $message->attach($temp_file, ['as' => 'Your_Invoice.pdf']);
    });

编辑: 我为我的网站添加了相同的需求。 所以我在我的插件中创建了一个 class 来生成发票、凭证或门票的 PDF,它似乎和你一样。


    <?php namespace LucasPalomba\Tranfers\Classes;
    
        use Flash;
        use Request;
        use LucasPalomba\Tranfers\Models\Settings;
        use Carbon\Carbon;
        use Renatio\DynamicPDF\Classes\PDF;
    
    
    class GeneratePDF {
        
        ...
    
        public static function invoice($dossier) {
    
            $price_without_taxes = number_format( ($dossier->prix_a_regler * 100 / 110) ,'2');
    
            $PDF = [
                'nom' => $dossier->client->nom,
                'prenom' => $dossier->client->prenom,
                'adresse' => $dossier->client->adresse,
                'code_postal' => $dossier->client->code_postal,
                'ville' => $dossier->client->ville,
                'email' => $dossier->client->email,
                'reference' => $dossier->reference,
                'price_without_taxes' => $price_without_taxes,
                'vat_amount' => $dossier->prix_a_regler - $price_without_taxes,
                'prix_a_regler' => $dossier->prix_a_regler
            ];
            $invoice = (strtolower($dossier->client->langue_site) == 'fr')? 'renatio::invoice_fr': 'renatio::invoice' ;
            $temp_file = tempnam(sys_get_temp_dir(), 'inv');
            PDF::loadTemplate($invoice, (array)$PDF)
                ->save($temp_file);
    
            $filename = 'invoice-' . trim($dossier->reference);
            $output = PDF::loadTemplate($invoice, (array)$PDF)->output();
            $filepath = temp_path() . '/' . $filename . '.pdf';
            \File::put( $filepath, $output);
    
            $file = new \System\Models\File;
            $file->data = $filepath;
            $file->is_public = true;
            $file->save();
            
            $dossier->pdf()->add($file);
    
            return $temp_file;
    
    
        }

然后在我的插件中,我像这样调用 class 来获取 PDF 并将其附加到邮件中:


    ...
    $invoice = GeneratePDF::invoice($dossier);
    
    Mail::send('lucaspalomba.tranfers::mail.'.$view , $vars , function($message) use ($dossier, $invoice){
    
            $message->attach($quote , ['as' => 'Your_Quote.pdf']);
            $message->to($dossier->client->email); //#0003
    
        });
    ...

您确定已在后台创建模板 renatio::invoice-membership 吗?

最佳,

好的,我知道了。

    $vars = ['amount' => 1.00, 'item' => 'stuff'];
    $temp_file = tempnam(sys_get_temp_dir(), 'inv');
    PDF::loadTemplate('invoice-membership', $vars)->save($temp_file);

renatio:: 部分在这里没有用,因为它将模板称为文件(即:PDF 视图)。由于我在后台创建模板(即:PDF 模板),所有数据都存储在数据库中。
但我不得不说官方文档对这一点的记录很差。 他们应该更具体地说明如何使用 PDF 模板的方法。