0

假设我们有OrderController具有三个动作/页面的控制器:orderDetailsAction, orderHistoryAction,orderCustomerDetailsAction

这些操作中的每一个都返回一些 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 来创建新的 Application 实例。会好很多,恕我直言。

4

2 回答 2

1

我会说,您的问题的原因是无效的 MVC 实现。

生成 HTML不是控制器的责任。相反,输出应该由视图实例创建——一个处理表示逻辑和处理多个模板的对象。与 RoR 一直试图提供给我们的相反——视图不是模板

在适当的 MVC 中,控制器负责直接基于用户输入或某种实例来更改模型层和选定视图的状态。Request

另外,两个旁注

  • 请不要使用工厂方法模式 [1] [2]。恕我直言,这是一种反模式,因为它会导致类之间的紧密耦合并吸引复杂性(它们往往会不受控制地增长)。
  • 它可能有用,而不是返回大块 HTML,而是使用 JSON 格式的数据响应 XHR 调用。然后在客户端生成 HTML。
于 2012-07-07T13:30:08.563 回答
0

Symfony2 使用子请求来调用多个控制器。您可以在此处的“嵌入控制器”下找到更多详细信息http://symfony.com/doc/current/book/templating.html

于 2012-07-07T13:12:00.467 回答