【问题标题】:October CMS - DynamicPDF plugin fails十月 CMS - DynamicPDF 插件失败
【发布时间】:2020-11-25 13:51:34
【问题描述】:

我已经安装了 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']);
});

我总是遇到同样的错误

模型[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']);
        });
      }

   ...

}

【问题讨论】:

  • hmm 你能检查一下模板是否存在renatio::invoice
  • 我在后台创建的,所以我猜它存在。
  • 你能分享一个你创建它的屏幕截图吗,因为我检查过,它似乎工作正常。

标签: octobercms


【解决方案1】:

好的,我明白了。

    $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 模板一起使用。

【讨论】:

    【解决方案2】:

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

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

    编辑: 我为我的网站添加了同样的需求。 所以我在我的插件中创建了一个类来生成发票、凭证或门票的 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;
        
        
            }
    
    

    然后在我的插件中,我调用这样的类来获取 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 吗?

    最好的,

    【讨论】:

    • 当然。我刚刚在我的帖子底部添加了它。
    • 我也添加了一些插件来帮助你,正如我所问的,你确定你已经在后台创建了模板吗?
    • 感谢您的帮助。我终于发现了问题所在。您可以在我上面的答案中查看。
    猜你喜欢
    • 2019-09-06
    • 2017-06-10
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多