Installation 安装
为了更轻松地处理 PDF,我将使用一个名为 laraveldaily/laravel-invoices 的发票生成器包
因此,让我们从安装此软件包开始:
composer require laraveldaily/laravel-invoices
Implementation 实现
让我们首先在 actions 函数中添加一个新的动作,我们给它起个名字 “Download Pdf”,传递一个 heroicon-o-document-download 图标,在 URL 函数中,我们通过传入一个闭包来获取记录,然后将其重定向到 student.pdf.download 路由并将记录作为参数传递。这里需要注意的另一件事是,我们需要将 model 作为 $record 传递,如果你给它起其他名字,这将引发一个错误。
我们还传入了 openUrlInNewTab() 函数,这只是个人喜好,也取决于用例。
->actions([
// ...
Tables\Actions\Action::make('Download Pdf')
->icon('heroicon-o-document-download')
->url(fn (Student $record) => route('student.pdf.download', $record))
->openUrlInNewTab(),
])
现在让我们继续定义路由,这段代码是不言自明的:
Route::get('/{record}/pdf/download', [DownloadPdfController::class, 'download'])->name('student.pdf.download');
让我们看看 DownloadPdfController
<?php
namespace App\Http\Controllers;
use App\Models\Student;
use Illuminate\Http\Request;
use LaravelDaily\Invoices\Invoice;
use LaravelDaily\Invoices\Classes\Buyer;
use LaravelDaily\Invoices\Classes\InvoiceItem;
class DownloadPdfController extends Controller
{
public function download(Student $record)
{
$customer = new Buyer([
'name' => 'John Doe',
'custom_fields' => [
'email' => 'test@example.com',
],
]);
$item = (new InvoiceItem())->title('Service 1')->pricePerUnit(2);
$invoice = Invoice::make()
->buyer($customer)
->discountByPercent(10)
->taxRate(15)
->shipping(1.99)
->addItem($item);
return $invoice->stream();
}
}
下载函数中的代码包含用于 PDF 生成的逻辑,您可以根据您的用例相应地定义逻辑。
如果我们继续刷新表格,我们应该会在 Edit 和 Delete 按钮旁边看到一个 Download Pdf。如果单击,将打开一个新选项卡,在其中呈现我们的 PDF。