类“Barryvdh\DomPDF\Facade\”未找到”

问题描述 投票:0回答:2

在本地主机上,这个包工作正常,但是当我将其部署在实时服务器上并尝试生成 pdf 时,出现此错误

Class \"Barryvdh\\DomPDF\\Facade\" not found"

我的代码背后的原因是什么

use Barryvdh\DomPDF\Facade as PDF;

我在这行代码上遇到错误

        $pdf = Pdf::loadHTML($htmlContent);

我的 config/app.php 代码是

'providers' => ServiceProvider::defaultProviders()->merge([
  Barryvdh\DomPDF\ServiceProvider::class,
 ])->toArray(),
 'aliases' => Facade::defaultAliases()->merge([
        // 'Example' => App\Facades\Example::class,
        'PDF' => Barryvdh\DomPDF\Facade::class,
   ])->toArray(),

并且在本地主机和实时服务器上都有 php 版本 8.2

laravel dompdf
2个回答
3
投票

您要找的课程是

Barryvdh\DomPDF\Facade\Pdf

Facade::defaultAliases()->merge([
    'PDF' => \Barryvdh\DomPDF\Facade\Pdf::class,
])->toArray(),
use PDF;

$pdf = PDF::loadHTML($htmlContent);

虽然您并不真正需要创建别名,但使用默认的外观是完全可以的。

Facade::defaultAliases()->merge([
    // nothing
])->toArray(),
use Barryvdh\DomPDF\Facade\Pdf;

$pdf = Pdf::loadHTML($htmlContent);

请记住,

Pdf
PDF
可以是 2 个不同的东西,具体取决于您的系统。


0
投票

使用正确的类名:确保您使用正确的大小写导入 Barryvdh\DomPDF\Facade\Pdf。要解决此问题,请将其添加到控制器或中间件文件的顶部:

use Barryvdh\DomPDF\Facade\Pdf;

在构造函数中注入 Pdf:将 Pdf 类注入到控制器或服务中,以避免直接使用外观。这种方法对于依赖注入特别有帮助,并增强了可测试性。

protected $pdf;

public function __construct(Pdf $pdf)
{
    $this->pdf = $pdf;
}

现在,您可以使用 $this->pdf 来访问类中的 Pdf 方法。

检查配置和缓存:进行这些更改后,清除并缓存您的配置,以确保 Laravel 识别更新的类引用:

php artisan config:clear
php artisan cache:clear
php artisan config:cache

使用示例 经过这些调整后,您可以生成 PDF,如下所示:

public function generatePdf()
{
   $pdf = Pdf::loadView('pdf.table', compact(
               'data'
            ));
            $pdf->setPaper('A4', 'portrait');

            return $pdf->download('data_table_12.pdf');
}

总结

关键修复是确保导入 Barryvdh\DomPDF\Facade\Pdf 正确地考虑区分大小写。将其注入 构造函数还允许 Laravel 管理依赖关系,减少 区分大小写的文件系统的问题。

© www.soinside.com 2019 - 2024. All rights reserved.