0

OrderController3つのアクション/ページを持つコントローラーがあると想像してみましょう: orderDetailsAction、、orderHistoryActionorderCustomerDetailsAction

これらの各アクションは、HTMLの一部を返します。

ここで、3つのhtmlピースすべてを同時に含むページが必要ですが、これを実行するために3つのajax呼び出しを行いたくありません

追加のコントローラーのアクションメソッドを作成しています(orderSummaryActionたとえば)。このメソッドには、次のようなものが含まれている必要があります。

public function orderSummartyAction {
   ob_start();
   Application::factory()->run('/order/details');
   Application::factory()->run('/order/history');
   Application::factory()->run('/order/customer_details');     
   $out = ob_get_clean();
   $this->getResponse()->setHtml($out);
}

そのようなことを行うフレームワークはありますか、それとも悪い習慣です(それではより良い方法は何ですか)?

ありがとうございました!

UPD:または、文字列urlではなく、Routeを渡して新しいアプリケーションインスタンスを作成することもできます。それははるかに良いでしょう、私見。

4

2 に答える 2

1

問題の原因は無効なMVC実装であると言えます。

HTMLを生成するのはコントローラーの責任ではありません。代わりに、出力はビューインスタンス(プレゼンテーションロジックを処理し、複数のテンプレートとジャグリングするオブジェクト)によって作成する必要があります。RoRが私たちに提供しようとしてきたこととは反対に、ビューはテンプレートではありません

適切なMVCでは、コントローラーは、ユーザー入力またはある種のインスタンスに直接基づいて、モデルレイヤーと選択されたビューの状態を変更する責任があります。Request

また、2つのサイドノート

  • ファクトリメソッドパターン [1] [2]は使用しないでください。IMHO、これはアンチパターンです。これは、クラス間の緊密な結合を引き起こし、複雑さを引き付けるためです(クラスは制御不能に成長する傾向があります)。
  • HTMLの大きなブロックを返す代わりに、JSON形式のデータでXHR呼び出しに応答すると便利な場合があります。次に、クライアント側でHTMLを生成します。
于 2012-07-07T13:30:08.563 に答える
0

Symfony2はサブリクエストを使用して複数のコントローラーを呼び出します。詳細については、「EmbeddingControllers」(http://symfony.com/doc/current/book/templating.html )を参照してください。

于 2012-07-07T13:12:00.467 に答える