在本地主机上,这个包工作正常,但是当我将其部署在实时服务器上并尝试生成 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
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 个不同的东西,具体取决于您的系统。
使用正确的类名:确保您使用正确的大小写导入 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 管理依赖关系,减少 区分大小写的文件系统的问题。