0

由模型-控制器-视图组成的所有不同模块(或包或您如何称呼它们)如何在 HMVC 架构中共享相同的站点设计(模板,包括页眉和页脚,css、js 等资产)作为所有的三合会都有自己的查看文件夹?

4

1 回答 1

0

您真的不希望模块共享相同的视图。通常你想要的是一个共同的观点,即外部观点。在 HMVC 中,控制器是视图和模型之间的中间人。所有请求都将被路由到控制器操作。您的初始请求可能是对实例化视图(外部视图)的控制器,然后在同一个控制器中,您向模块控制器发出请求,该模块控制器提供视图作为响应。初始控制器获取模块控制器视图响应并将其设置为外部视图的一部分。

Class Controller_Page extends Controller {
/**
*Initial controller
*/
public function action_index() {
  //get the outer controller view
  $outerView = View::factory('outermost');
  //request to a module called widget
  $widgetView = Request::factory('widget');
  //add the widget to the body of the outer view
  $outerView->body = $widgetView;
  $this->response->body($outerView);
  }
}

Class Controller_Widget extents Controller {
/**
*Module Controller
*/
public function action_index() {
   $view = View::factory('widget');
   //set the widget view as the response
   $this->response->body($view);
   }
}

//contents of "outermost" view
<html>
<body>
<!--The $body property was binded to the view by the contoller ("$outerView->body") -->
<!-- Binding of properties to views is how data is passed to the view -->
<?php echo $body; ?>
</body>
</html>

//contents of "widget" view
<p>
I'm a widget
</p>

//the final result will be
<html>
<body>
<p>I'm a widget</p>
</body>
</html>

另请注意,在 HMVC 中有一个模型、视图和控制器,但它不是您听到的“MVC 架构”。它更遵循表示抽象控制 (PAC) 架构。在 MVC 架构中,模型会通知视图的变化,而 PAC 不是这种情况。

于 2013-06-18T23:31:22.457 回答