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