1

多くの異なるファイル形式で任意の量のレポートを作成する必要があります。Smarty を使用して出力をテンプレート化できるほとんどの形式。ただし、Excel および PDF への出力は複雑であり、FPDF または TCPDF と PHPExcel を使用する必要があります。

1 つまたは複数の設計パターン (可能であれば) を使用してクラスを編成する最善の方法を見つけようとしています。

出力形式:

  • テキスト - Smarty
  • テキスト (PCL フォーマット付き) - Smarty
  • CSV - Smarty
  • HTML - スマート
  • エクセル - PHPエクセル
  • PDF - FPDF / TPDF

これらの形式は、ストリーミング用にメモリに格納したり、後で使用するためにファイルに書き込んだりできる必要があります。

すべてのレポートで一貫している唯一のことは、データが必要であり、PDF と Excel のサポートが追加されるまで、テンプレートが必要であるということです。現在、getData() という抽象メソッドを持つ Report クラスがあります。各サブクラス (SpecificReport など) は必要なデータを取得し、テンプレートなどにバインドするためにクラス プロパティに格納します。

各レポートは、すべての形式で利用できる必要があります。

現時点では Report クラスが出力を処理しますが、Excel と PDF のサポートを追加すると、それが不可能になります。Smarty のようにデータをテンプレートにバインドするだけではありません。各レポートには特定のコードが必要です。各レポート サブクラスでこれらのメソッドをオーバーロードするだけでよいと思います。

誰かが同様のタスクに遭遇しましたか?

4

1 に答える 1

1

Two Step View patternを使用できるようですね。

基本的に、レポートは 2 つのパスで表示されます。最初のパスでは、モデルに対してレポート ロジックを実行し、一種のプロト レポート オブジェクトを生成します。最初のパス プロト レポートには、レポートに記載されるすべての情報が含まれ、レポートの必要に応じて整理およびグループ化されます。

これが完了すると、proto-report がテンプレートに入力され、特定の形式 (pdf、xls、csv など) にレンダリングされます。この 2 番目のパスはレポートのバイトを生成し、ファイルに保存したり、ネットワーク経由で送信したりできます。

于 2009-10-05T03:07:27.663 に答える