Lewati ke konten

Integrasi NextPDF Symfony

Pasang nextpdf/symfony, biarkan Flex mendaftarkan bundle atau daftarkan secara manual, tambahkan config/packages/nextpdf.yaml, lalu suntikkan PdfFactory. Gunakan halaman ini sebagai indeks integrasi. Setiap langkah mengarah ke panduan yang lebih mendalam.

Terminal window
composer require nextpdf/symfony

Bundle ini memerlukan nextpdf/core^3.0 || ^5.2, symfony/*^7.2, dan psr/log^3.0. Kelas-kelas dimuat otomatis di bawah prefiks PHP Standards Recommendation (PSR)-4 NextPDF\Symfony\, yang dipetakan ke src/Symfony/. Autoloader PSR-4 memetakan prefiks namespace tersebut ke direktori dasar (PSR-4 §2). Untuk persyaratan lengkap beserta paket opsional, lihat /integrations/symfony/install/.

Dengan Symfony Flex, entri extra.symfony.bundles di composer.json milik bundle mendaftarkan NextPDF\Symfony\NextPdfBundle untuk semua lingkungan. Tanpa Flex, tambahkan secara manual ke config/bundles.php:

return [
NextPDF\Symfony\NextPdfBundle::class => ['all' => true],
];

Untuk urutan boot lengkap dan perilaku compiler pass, lihat /integrations/symfony/boot-and-discovery/.

Berkas config/services.php milik bundle mendaftarkan layanan berikut:

Layanan / aliasSiklus hidup
NextPDF\Symfony\Service\PdfFactoryshared, publik; suntikkan layanan ini
nextpdf.documentPdfDocumentInterfaceDocumentnon-shared, publik; baru setiap kali di-resolve
NextPDF\Contracts\FontRegistryInterfaceshared, terkunci setelah warmup
NextPDF\Graphics\ImageRegistryshared, kernel.reset
NextPDF\Contracts\DocumentFactoryInterfaceshared
NextPDF\Symfony\Http\PdfResponsehelper publik, stateless

Binding dokumen sengaja dibuat non-shared. PSR-11 mengizinkan container mengembalikan nilai yang berbeda pada panggilan get() berurutan untuk identifier yang sama. Dokumen baru menghindari state lintas-permintaan pada worker yang berjalan lama (PSR-11 §1.1.2). Untuk tabel lengkap layanan dan alias, termasuk binding EInvoice kondisional, lihat /integrations/symfony/configuration/.

Alias konfigurasinya adalah nextpdf. Buat config/packages/nextpdf.yaml. Saat Flex menerbitkan resep, Flex menambahkan salinan standar untuk Anda. Karena setiap kunci memiliki nilai standar, berkas minimal terlihat seperti ini:

nextpdf: ~

Pohon konfigurasi lengkap didokumentasikan di /integrations/symfony/configuration/.

Suntikkan PdfFactory, lalu kembalikan dokumen dengan PdfResponse:

src/Controller/PdfController.php
<?php
declare(strict_types=1);
namespace App\Controller;
use NextPDF\Symfony\Http\PdfResponse;
use NextPDF\Symfony\Service\PdfFactory;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
final class PdfController
{
#[Route('/hello.pdf', name: 'hello_pdf')]
public function hello(PdfFactory $pdf): Response
{
$doc = $pdf->create();
$doc->addPage();
$doc->cell(0, 10, 'Hello from NextPDF on Symfony.');
return PdfResponse::inline($doc, 'hello.pdf');
}
}

Untuk controller lengkap dan alur asinkron Messenger, lihat /integrations/symfony/quickstart/.

Verifikasi integrasi tanpa menulis kode aplikasi:

Terminal window
php bin/console debug:container nextpdf
php bin/console debug:config nextpdf
php bin/console lint:container

debug:container nextpdf seharusnya menampilkan PdfFactory, alias nextpdf.document, dan registry terkait. lint:container memeriksa bahwa setiap argumen layanan dapat di-resolve. Untuk menguji pembuatan, tambahkan controller di atas, lalu akses /hello.pdf.

Permukaan application programming interface (API) menyediakan simbol publik berikut untuk kode aplikasi:

SimbolTujuan
NextPDF\Symfony\Service\PdfFactory::create()Document baru yang telah terkonfigurasi
NextPDF\Symfony\Http\PdfResponse::inline() / download()respons ter-buffer dengan header keamanan
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload()respons stream bertahap
NextPDF\Symfony\Message\GeneratePdfMessagedata transfer object (DTO) untuk pembuatan asinkron (tervalidasi)
NextPDF\Symfony\Message\PdfBuilderInterfacekontrak builder yang di-resolve oleh handler

Setiap baris mencantumkan klaim normatif yang dibuat di halaman ini. Setiap klaim dipasangkan dengan reference_id 64-hex penuh dari korpus standards development organization (SDO) yang terkunci. Provenans (manifes korpus dan transport pengambilan) tersedia di _sidecars/rag-citations.yaml.

SpesifikasiKlausulreference_idKlaim
PSR-11psr_11_container#1.1.2.p4Kontrak identifier has()/get() pada container
PSR-4psr_4_autoload#x1.x2.p5Pemetaan namespace autoloader
  • /integrations/symfony/install/ — persyaratan dan pendaftaran.
  • /integrations/symfony/boot-and-discovery/ — penemuan, boot, dan compiler pass.
  • /integrations/symfony/configuration/ — skema lengkap dan tabel layanan.
  • /integrations/symfony/quickstart/ — controller siap dijalankan dan contoh async.
  • /integrations/symfony/production-usage/ — keamanan worker dan streaming.