Integrasi NextPDF Symfony
Sekilas
Bagian berjudul “Sekilas”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.
Pemasangan
Bagian berjudul “Pemasangan”composer require nextpdf/symfonyBundle 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/.
Boot dan penemuan otomatis
Bagian berjudul “Boot dan penemuan otomatis”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/.
Binding container
Bagian berjudul “Binding container”Berkas config/services.php milik bundle mendaftarkan layanan berikut:
| Layanan / alias | Siklus hidup |
|---|---|
NextPDF\Symfony\Service\PdfFactory | shared, publik; suntikkan layanan ini |
nextpdf.document → PdfDocumentInterface → Document | non-shared, publik; baru setiap kali di-resolve |
NextPDF\Contracts\FontRegistryInterface | shared, terkunci setelah warmup |
NextPDF\Graphics\ImageRegistry | shared, kernel.reset |
NextPDF\Contracts\DocumentFactoryInterface | shared |
NextPDF\Symfony\Http\PdfResponse | helper 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/.
Terbitkan konfigurasi
Bagian berjudul “Terbitkan konfigurasi”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/.
Penggunaan pertama
Bagian berjudul “Penggunaan pertama”Suntikkan PdfFactory, lalu kembalikan dokumen dengan PdfResponse:
<?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/.
Uji asap bundle
Bagian berjudul “Uji asap bundle”Verifikasi integrasi tanpa menulis kode aplikasi:
php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console lint:containerdebug: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.
Titik masuk API publik
Bagian berjudul “Titik masuk API publik”Permukaan application programming interface (API) menyediakan simbol publik berikut untuk kode aplikasi:
| Simbol | Tujuan |
|---|---|
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\GeneratePdfMessage | data transfer object (DTO) untuk pembuatan asinkron (tervalidasi) |
NextPDF\Symfony\Message\PdfBuilderInterface | kontrak builder yang di-resolve oleh handler |
Kesesuaian
Bagian berjudul “Kesesuaian”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.
| Spesifikasi | Klausul | reference_id | Klaim |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p4 | Kontrak identifier has()/get() pada container | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | Pemetaan namespace autoloader |
Lihat juga
Bagian berjudul “Lihat juga”- /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.