HMVC模式 - 所有三元组M-V-C如何共享相同的视图模板/ css / etc.

时间:2013-06-16 22:38:03

标签: php hmvc

如何将由models-controllers-views组成的所有不同模块(或称为包,或者你称之为)共享相同的网站设计(模板,包括类似页眉和页脚,资源如css,js等)所有三元组的HMVC架构都有自己的View文件夹?

1 个答案:

答案 0 :(得分: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不是这种情况。