一个最佳的分层结构:
降低项目之间的依赖性
鼓励重用代码,组件和模块
增加可扩展性,减轻可维护性
在客户端使用HMVC分层结构的用途
模块化界面元素或部件
应用和菜单控制
服务器交互
可重复使用的应用流
HMVC基础
一个很容易理解HMVC的方法是就像AJAX没有额外的服务器调用。例如,你用AJAX的动作显示一个用户列表。你可以在其他控制器重用那个动作,而不是重复方法。
Request Factory
可以通过Kohana的Request::factory()的方法实现HMVC。使用Request factory你可以在认识时间请求过程中随意充分执行一个Kohana request。
Request::factory()方法接受RouteURI作为参数,并可以结合Kohana强大的路由功能你创建的任意应用程序。
在控制器中使用Request Factory
下面的例子为你展示如何在其他控制器使内部使用Request Factory。
虽然不能全部突出HMVC的强大功能,它可以为你展示如何将分开的两个请求布局到一个层。
class Controller_Static extends Controller{
/**
* The following action loads page.
* A sub request is called to load a dynamic menu
*/
public function action_page(){
$page_name = Request::instance()->param('page');
$this->request->response = View::factory('page/'.$page_name)->bind('menu', $menu);
$menu = Request::factory('static/menu')->execute()response;
}
public function action_menu(){
$page_name = Request::instance()->param('page');
$this->request->response = View::factory('page/menu')->bind('links', $links);
$links = Kohana::config('menu')->$page_name;
}
}
在一个视图中使用Request Factory
另一个使用Request Factory的有效方式是从一个视图中调用请求。在下面的例子里我们通过从视图中调用动态菜单和动态页脚代替控制器。
<h1>< ?php echo $page_title ?></h1> < ?php echo Request::factory('page/menu')->execute()->response ?> <div id="container">
< ?php echo $content ?>
</div> < ?php echo Request::factory('page/menu')->execute()->response ?>
使用Request Factory以Kohana为基础整合其他开源项目
如果你分析Kohana 的bootstrap.php文件,你会注意到没有神奇发生直到一个Request类被创建Request::instance()方法被调用。
Request::instance()和Request::factory的唯一不同点是instance()方法创建仅仅是创建一个单独的指导主请求和输出必要的响应头文件的Request类。
一个很重要的事情必须指出,但也不绝对创建一个单独的Request实例或者输出任何headers.一个Kohana的请求在Kohana初始化时被全 部执行需要使用Request::factory()。使用Kohana-for-Wordpres插件kohana如何被整合到Wordpress