NextPDF Symfony 統合
まず nextpdf/symfony をインストールし、Flex でバンドルを登録するか、手動で登録します。次に config/packages/nextpdf.yaml を追加し、PdfFactory をインジェクトします。このページは配線(wiring)全体のインデックスです。各ステップは、より詳しいページへのリンクです。
インストール
「インストール」という見出しのセクションcomposer require nextpdf/symfonyこのバンドルには nextpdf/core^3.0 || ^5.2、symfony/*^7.2、および
psr/log^3.0 が必要です。クラスは PSR-4 プレフィックス NextPDF\Symfony\ 配下でオートロードされ、src/Symfony/ にマッピングされます。PSR-4 オートローダーは、名前空間プレフィックスを対応するベースディレクトリへ resolve(解決)します(PSR-4 §2)。要件の詳細とオプションのパッケージについては、/integrations/symfony/install/. を参照してください。
起動と自動検出
「起動と自動検出」という見出しのセクションSymfony Flex では、バンドルの composer.json 内にある extra.symfony.bundles エントリーが、すべての環境で NextPDF\Symfony\NextPdfBundle を登録します。Flex を使用しない場合は、config/bundles.php に手動で追加します。
return [ NextPDF\Symfony\NextPdfBundle::class => ['all' => true],];起動シーケンス全体とコンパイラーパスの動作については、/integrations/symfony/boot-and-discovery/. を参照してください。
コンテナーバインディング
「コンテナーバインディング」という見出しのセクションバンドルの config/services.php ファイルは、次のサービスを登録します。
| サービス / エイリアス | ライフサイクル |
|---|---|
NextPDF\Symfony\Service\PdfFactory | shared、public — インジェクト対象 |
nextpdf.document → PdfDocumentInterface → Document | non-shared、public — 解決のたびに新規生成 |
NextPDF\Contracts\FontRegistryInterface | shared、ウォームアップ後にロック |
NextPDF\Graphics\ImageRegistry | shared、kernel.reset でリセット |
NextPDF\Contracts\DocumentFactoryInterface | shared(共有インスタンス) |
NextPDF\Symfony\Http\PdfResponse | public、ステートレスヘルパー |
ドキュメントのバインディングは、意図的に non-shared にしています。PSR-11 では、コンテナーが同一の id に対する連続した get() 呼び出しで異なる値を返すことが許容されています。新規のドキュメントにより、長時間稼働するワーカーでのリクエスト間の状態共有を回避します(PSR-11 §1.1.2)。条件付きの EInvoice バインディングを含む、サービスとエイリアスの完全な一覧については、/integrations/symfony/configuration/. を参照してください。
設定の発行
「設定の発行」という見出しのセクション設定のエイリアスは nextpdf です。config/packages/nextpdf.yaml を作成します。Flex レシピが発行されると、デフォルトのコピーが自動的に配置されます。すべてのキーにデフォルト値があるため、最小限のファイルは次のようになります。
nextpdf: ~設定ツリー全体は /integrations/symfony/configuration/. で説明されています。
最初の使用
「最初の使用」という見出しのセクションまず PdfFactory をインジェクトし、その結果を 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'); }}エンドツーエンドのコントローラーと Messenger を使った非同期パスについては、/integrations/symfony/quickstart/. を参照してください。
バンドルのスモークテスト
「バンドルのスモークテスト」という見出しのセクションアプリケーションコードを一切記述せずに、配線(wiring)を確認します。
php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console lint:containerdebug:container nextpdf では、PdfFactory、nextpdf.document エイリアス、および各レジストリが一覧表示されるはずです。lint:container は、すべてのサービス引数が解決されることを検証します。生成をテストするには、前述のコントローラーを追加してから /hello.pdf にリクエストします。
公開 API のエントリーポイント
「公開 API のエントリーポイント」という見出しのセクションアプリケーションコードからの利用がサポートされる公開シンボルは、次のとおりです。
| シンボル | 用途 |
|---|---|
NextPDF\Symfony\Service\PdfFactory::create() | 事前設定済みの新規 Document |
NextPDF\Symfony\Http\PdfResponse::inline() / download() | セキュリティヘッダー付きのバッファリングされたレスポンス |
NextPDF\Symfony\Http\PdfResponse::streamInline() / streamDownload() | チャンク化されたストリーミングレスポンス |
NextPDF\Symfony\Message\GeneratePdfMessage | 非同期生成用の DTO(検証済み) |
NextPDF\Symfony\Message\PdfBuilderInterface | ハンドラーによって解決されるビルダー契約 |
各行は、このページで述べている規範的な主張です。各主張は、ゲート付き SDO コーパスの完全な 64 桁の 16 進数 reference_id にひも付けられています。来歴(コーパスマニフェスト、取得トランスポート)は _sidecars/rag-citations.yaml にあります。
| 仕様 | 条項 | リファレンス ID | 主張 |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p4 | コンテナーの has()/get() 識別子契約 | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | オートローダーの名前空間マッピング |
- /integrations/symfony/install/ — 要件と登録。
- /integrations/symfony/boot-and-discovery/ — 検出、起動、コンパイラーパス。
- /integrations/symfony/configuration/ — 完全なスキーマとサービス一覧。
- /integrations/symfony/quickstart/ — 実行可能なコントローラーと非同期の例。
- /integrations/symfony/production-usage/ — ワーカーの安全性とストリーミング。