NextPDF Symfony のブートと検出
カーネルは NextPdfBundle を登録します。バンドルの DI 拡張は services.php を読み込み、構成ツリーをコンテナーパラメーターへ解決します。続いて 1 つのコンパイラーパスが、オプション拡張とフォントのウォームアップを配線します。
Symfony Flex によるバンドルの検出方法
「Symfony Flex によるバンドルの検出方法」という見出しのセクションバンドルの composer.json は、自動登録のヒントを宣言します。
{ "extra": { "symfony": { "bundles": { "NextPDF\\Symfony\\NextPdfBundle": "all" } } }}Symfony Flex アプリケーションでは、これにより NextPDF\Symfony\NextPdfBundle が、すべての環境(all)向けに config/bundles.php へ追加されます。Flex を使用しない場合は、config/bundles.php でバンドルを手動で追加します。Symfony は、バンドル登録モデルを公式にドキュメント化しています(https://symfony.com/doc/current/bundles.html)。バンドルのクラスは、PSR-4 プレフィックス NextPDF\Symfony\ の下でオートロードされ、src/Symfony/ にマッピングされます。PSR-4 オートローダーは、名前空間プレフィックスを対応するベースディレクトリにマッピングします(PSR-4 §2)。
ブートシーケンス
「ブートシーケンス」という見出しのセクションバンドルのソースに照らして検証したブートシーケンスは次のとおりです。
- カーネルがバンドルを登録します。
Kernel::registerBundles()はconfig/bundles.phpを読み込み、NextPDF\Symfony\NextPdfBundleをインスタンス化します。これはSymfony\Component\HttpKernel\Bundle\Bundleを継承します。 - バンドルのビルド。
NextPdfBundle::build()は親を呼び出し、続いて 1 つのコンパイラーパスOptionalExtensionPassを登録します。NextPdfBundle::getPath()はパッケージルートを返します。 - 拡張の読み込み。 DI 拡張
NextPDF\Symfony\DependencyInjection\NextPdfExtension(エイリアスnextpdf)は、Configurationに対してprocessConfiguration()を実行します。解決された値をnextpdf.*コンテナーパラメーターとして設定し、続いてPhpFileLoaderを介してconfig/services.phpを読み込みます。 - 必須拡張のガード。
NextPdfExtension::load()は最後にext-mbstringとext-zlibが存在することをアサートし、存在しない場合は即座に失敗します。 - コンパイラーパスの実行。 コンテナーのコンパイル中に、
OptionalExtensionPass::process()はPdfFactoryの拡張可用性フラグを構成し、署名担当と TSA クライアントを条件付きで登録し、フォントレジストリのウォームアップとロックをスケジュールします。 - コンテナーのコンパイルとキャッシュ。 Symfony はコンパイル済みコンテナーを書き出します。
cache:warmupは、トラフィックを受ける前にこのステップを実行します。
コンパイラーパス
「コンパイラーパス」という見出しのセクションバンドルは、ちょうど 1 つのパス NextPDF\Symfony\DependencyInjection\Compiler\OptionalExtensionPass を登録します。これは NextPdfBundle::build() で追加されます。このパスはデフォルト(最適化前)のパスグループで実行されます。このパスは 4 つのステップを実行します。各ステップはガードされており、入力が存在しない場合は何も実行しません。
- 拡張フラグ —
setArtisanAvailable(...)とsetProAvailable(...)のメソッド呼び出しを、PdfFactory定義に追加します。これらの値は、Artisan ブラウザーファクトリーと Pro PDF/A クラスに対するコンパイル時のclass_existsプローブに由来します。 - 署名担当の登録 —
nextpdf.signatureが存在し、enabledが true で、証明書が設定されている場合に、ベースラインの B-B プロファイル向けの証明書情報ファクトリーと署名担当サービスを登録します。 - TSA クライアント —
nextpdf.tsaに URL が設定されている場合、TSA クライアントサービスを登録します。 - フォントのウォームアップ —
nextpdf.preload_fontsが空でない場合、フォントレジストリ定義にwarmup()とlock()のメソッド呼び出しを追加します。
コンテナーのバインディング
「コンテナーのバインディング」という見出しのセクションconfig/services.php はサービスを定義します。ドキュメントサービス nextpdf.document(NextPDF\Contracts\PdfDocumentInterface および NextPDF\Core\Document のエイリアス)は 非共有 です。解決のたびに新しいドキュメントが返されますが、これは PSR-11 が明示的に許可しています。つまり、1 つの ID に対する連続した get() 呼び出しが、異なる値を返す場合があります(PSR-11 §1.1.2)。フォントレジストリは共有され、ウォームアップ後にロックされます。イメージレジストリは共有され、kernel.reset のタグが付与されます。完全な表は /integrations/symfony/configuration/. にあります。
構成の解決順序
「構成の解決順序」という見出しのセクション- 組み込みデフォルト値。これは
Configuration(getConfigTreeBuilder())に由来します。 - アプリケーションのオーバーライドは
config/packages/nextpdf.yamlに配置し、環境別オーバーライドはconfig/packages/<env>/配下に配置します。 - Symfony は
%kernel.*%パラメータープレースホルダーを解決します。たとえば、fonts_pathはデフォルトで%kernel.project_dir%/resources/fontsになります。 NextPdfExtension::load()は、マージ結果をnextpdf.*コンテナーパラメーターに書き込みます。この値はservices.phpとコンパイラーパスで使用されます。
無効な値は、ステップ 1〜2 で Symfony の InvalidConfigurationException によって失敗します。
php bin/console debug:container nextpdfphp bin/console debug:config nextpdfphp bin/console cache:clear1 つ目は、登録済みのサービスを一覧表示します。2 つ目は、マージ済みの構成を出力します。3 つ目は、コンテナーを再構築し、コンパイル時の拡張プローブを再実行します。
各行は、このページで示される規範的な主張であり、ゲート付き SDO コーパス由来の完全な 64 桁の 16 進数 reference_id に紐付けられています。Provenance(来歴情報、コーパスマニフェスト、取得トランスポート)は _sidecars/rag-citations.yaml にあります。
| 仕様 | 条項 | リファレンス ID | 主張 |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p3.b | コンテナーの解決は呼び出しごとに異なる場合がある | |
| PSR-4 | psr_4_autoload#x1.x2.p5 | 名前空間プレフィックスからベースディレクトリへのマッピング |
- /integrations/symfony/integration/ — エンドツーエンドの配線リファレンス。
- /integrations/symfony/install/ — インストールと登録。
- /integrations/symfony/configuration/ — 完全な構成ツリーとサービス表。
- /integrations/symfony/overview/ — 機能の概要。