如何使用Kohana的级联文件系统实现HMVC

时间:2011-11-12 18:20:33

标签: kohana kohana-3 hmvc

Kohana 3.2旨在支持HMVC设计模式。 HMVC模式由嵌套的MVC三元组组成。然而据我所知,Kohana的级联文件系统要求所有模型和控制器都放在顶级'classes'目录中,并将Views放入顶级'views'目录。如果模型/控制器因此与文件系统顶层的视图分离,那么我们应该如何实现嵌套的MVC-triads?

enter image description here

2 个答案:

答案 0 :(得分:2)

不确定是否要破解处理视图的方式,但您可以扩展Kohana_View类,以便set_filename()函数接受您想要的任何目录。

如果您想要一个类似于控制器/型号的自动加载功能,您可以自己实现它。

例如(未经测试):

public function set_filename($view)
{        
    // Transform the class name into a path
    $file = str_replace('_', '/', strtolower($view));

    if ($path = Kohana::find_file('classes', $file))
    {
        // Store the file path locally
        $this->_file = $path;

        return $this;
    }  

    throw new View_Exception('The requested view :view could not be found', array(
        ':view' => $view,
    ));
}

答案 1 :(得分:2)

  

据我所知,Kohana的级联文件系统要求所有模型和控制器都放在顶级'classes'目录中,并将Views放入顶级'views'目录。

你似乎想要的是一个文件夹结构,如Kohana 2,codeigniter,很可能是其他框架,它们有控制器,模型和视图的专用文件夹。 Kohana 3有一个专门的课程文件夹。构建Kohana 3的方式强制控制器应具有Controller_前缀。 Kohana 3自动加载器将在类/控制器文件夹中查找具有Controller_前缀的类。

然后Kohana 3还附带了非常基本的Model和View类。据我所知,Kohana 3核心不使用Model类,它只在少数情况下使用View类。但是给模型提供Model_前缀的约定可以在Model :: factory()中找到,但是它并没有强制执行。你不必使用它们。

View类在de views文件夹中查找模板。 Zombor(其中一个开发者)的({Zombor不推荐)View_Module也常常出现在那里。 (由Zombor重新推荐)KOstache模块,再次由Zombor,在模板文件夹中查找其模板。这两个模块都允许您创建View-Model类,其约定具有View_前缀,因此它们最终位于类/视图中。但是没有什么能阻止你创建一个View_类,它为你放入views文件夹的每个模板扩展View,并硬编码该View-Model的路径。

请注意,classes文件夹仅适用于课程。