コンテンツにスキップ

CodeIgniter 開発者向けガイド

CodeIgniter パッケージは、サービスファクトリ、ヘルパー関数、1 つのドキュメントをラップする小さな Pdf ライブラリラッパーを公開します。このラッパーはコントローラーから使うと便利です。CodeIgniter のキューペイロードはシリアライズ済みデータであるため、キュー処理では静的なビルダー callable を使用します。

コントローラーのフロー、サービス、キュービルダー、またはテストを nextpdf/codeigniter を中心に設計する際は、このガイドを参照してください。

レイヤー所有元責務ここに配置しないもの
コントローラーアプリケーション認可、ビルダーまたはサービスの呼び出し、DownloadResponse の返却共有レイアウトロジック
ライブラリラッパーnextpdf/codeigniter1 つの Document のラップと、response/save ヘルパーの提供長期保持するドキュメントの保存
サービスファクトリnextpdf/codeigniter共有レジストリと新規ドキュメントの作成業務固有のストレージルート
キュービルダーアプリケーション静的な callable 入力からのドキュメントビルドリクエストオブジェクトやシリアライズできない状態
コアエンジンnextpdf/nextpdfPDF のビルドとシリアライズCodeIgniter のレスポンスやキューのポリシー
ステージ動作開発者のアクション
オートロードの登録Registrar::Autoload() によるモジュールのヘルパー読み込み登録CodeIgniter の設定を通じたモジュール読み込み
サービスの resolve(解決)Services::pdf() のデフォルト動作として、新規ドキュメントをラップするラッパーの返却リクエストごとに 1 回のみ解決
オーサリングアプリケーションコードによる、コアのドキュメント呼び出しへの Pdf::document() の使用ドキュメント構築コードのサービスまたはビルダーへの配置
レスポンスPdfResponse による DownloadResponse の返却PDF ヘッダー設定のパッケージへの委譲
キューの実行GeneratePdfJob::process() による、ビルダーと出力パスの検証後の保存キュービルダーの App\PdfBuilders 配下への配置
パス目的
app/PdfBuilders/*GeneratePdfJob が受け付ける、静的でキューセーフなビルダー
app/Libraries/*繰り返し発生するドキュメントワークフローをラップする任意のアプリケーションラッパー
app/Services/*ドメインデータの取得とストレージポリシー
app/Config/NextPdf.phpパッケージ設定に対するアプリケーション側オーバーライド
tests/app/PdfBuilders/*ビルダーとキューペイロードのテスト

短いフローではパッケージのヘルパーを使用してください。ドキュメント構築が直接テストすべきクラスに属する場合は、明示的なサービス呼び出しを使用してください。

<?php
namespace App\Controllers;
final class InvoiceController extends BaseController
{
public function download(int $id)
{
$pdf = pdf();
$pdf->document()
->setTitle('Invoice ' . $id)
->addPage()
->writeHtml('<h1>Invoice ' . $id . '</h1>');
return $pdf->download('invoice-' . $id . '.pdf');
}
}

キュービルダーは静的かつ決定論的で、App\PdfBuilders の下に配置する必要があります。コンテキスト配列は、シリアライズと監査が容易な程度に単純な状態に保ってください。

<?php
namespace App\PdfBuilders;
use NextPDF\Core\Document;
final class InvoiceBuilder
{
public static function build(Document $document, array $context): Document
{
$document->setTitle((string) $context['title'])
->addPage()
->writeHtml((string) $context['html']);
return $document;
}
}

ジョブは、出力先を設定済みのアプリケーション PDF ディレクトリ内に限定します。アプリケーションでテナント固有のストレージが必要な場合は、そのポリシーを 1 つのサービスに集約し、キューのディスパッチ前にテストしてください。

拡張ポイント用途制約
Services::pdfDocument()ドキュメント作成のカスタマイズ新規ドキュメントの返却が必須
Services::fontRegistry()フォントのウォームアップとレジストリへのアクセス安全でないパスの拒否と、ウォームアップ後のレジストリロック維持
Services::pdfSigner()任意のデジタル署名署名が無効な場合の null 返却
NextPDF\CodeIgniter\Libraries\Pdfコントローラー向けラッパー1 つのラッパーにつき 1 つのドキュメント
App\PdfBuilders::*キューセーフなドキュメントビルダー静的な callable 文字列が必須
app/Config/NextPdf.phpアプリケーションのデフォルトと統合設定本番環境の値の明示指定を維持
  1. コントローラーから始めて、pdf() または service('pdf') を呼び出します。
  2. 繰り返し発生するドキュメント構築は、app/PdfBuilders またはアプリケーションサービスに移動します。
  3. リクエストパスで生成すると遅すぎる場合は、GeneratePdfJob を使用します。
  4. キューのコンテキストは、シリアライズ可能で小さい状態に保ってください。
  5. 意図的にポリシーを拡張する場合を除き、出力は承認済みの PDF ストレージルート配下に保存してください。
  6. ヘルパー、サービス、キューペイロード、および安全でないパスに対するテストを追加してください。
障害処理すべき場所推奨される対応
拡張機能の欠如または安全でないフォントパスサービスファクトリサービス解決時の早期失敗
無効なビルダー callableキュージョブの検証ジョブの拒否と、シークレットを含めないビルダー文字列のログ記録
安全でない出力パスストレージサービスとキュージョブディスパッチ前の拒否と、ジョブ検証の維持
レスポンスのシリアライズエラーコントローラーまたはフレームワークのエラー処理部分的なレスポンスボディを送信しないこと
任意の Premium クラスが利用できないサービスメソッドの戻り値任意の e-invoice 機能使用前の null の明示的な処理
関心事デフォルトオーバーライドするタイミング
キュービルダーの名前空間App\PdfBuildersセキュリティポリシーも併せて更新しない限り、デフォルトを維持
出力ルートWRITEPATH/pdfsより強力な許可リストを伴う場合のみオーバーライド
レスポンスのファイル名document.pdfサニタイズ済み業務用ファイル名の使用
ストリームメソッド他のフレームワークとの API の同等性CodeIgniter では、ストリーミングをメモリ境界として頼らないこと
ドキュメントサービスデフォルトで新規リクエストコード内で共有ドキュメントを要求しないこと
  • サービステストでは、Services::pdf() を解決するたびに独立したドキュメントが返ることを検証します。
  • ヘルパーテストでは、pdf()pdf_document() が新規オブジェクトを返すことを検証します。
  • レスポンステストでは、ヘッダーとファイル名の正規化を検証します。
  • キューテストでは、無効なビルダー文字列と安全でない出力パスを対象にします。
  • ビルダーテストは、代表的なコンテキストデータを使って実行します。
  • 設定テストでは、フォントパス、キャッシュパス、署名の無効化、および TSA の無効化の各状態を対象にします。