Kohana 3.2 旨在支持 HMVC 设计模式。HMVC 模式由嵌套的 MVC 三元组组成。然而据我所知,Kohana 的级联文件系统要求所有模型和控制器都放置在顶部的“类”目录中,并将视图放置在顶部的“视图”目录中。如果模型/控制器因此与文件系统顶层的视图分离,那么我们应该如何实现嵌套的 MVC-triads?
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,
));
}
然而据我所知,Kohana 的级联文件系统要求所有模型和控制器都放置在顶部的“类”目录中,并将视图放置在顶部的“视图”目录中。
您似乎想要的是一个文件夹结构,如 Kohana 2、codeigniter 和最有可能的其他框架,它们具有用于控制器、模型和视图的专用文件夹。Kohana 3 有一个专门的类文件夹。Kohana 3 的构建方式强制控制器应该有一个 Controller_ 前缀。Kohana 3 自动加载器将在 classes/controller 文件夹中查找带有 Controller_ 前缀的类。
然后 Kohana 3 还带有非常基本的模型和视图类。据我所知,Kohana 3 核心不使用 Model 类,它仅在少数情况下使用 View 类。但是在 Model::factory() 中可以找到为模型提供 Model_ 前缀的约定,但是它并没有被强制执行。您不必使用它们。
View 类在 de views 文件夹中查找模板。Zombor(开发人员之一)的(Zombor 不推荐)View_Module也碰巧看到那里。(由 Zombor 重新设计的)KOstache模块,同样由 Zombor 提供,在模板文件夹中查找其模板。这两个模块都允许您创建 View-Model 类,其约定是具有 View_ 前缀,因此它们最终位于 classes/view 中。但是没有什么能阻止您创建一个 View_ 类,该类为您放入视图文件夹的每个模板扩展视图并硬编码该视图模型的路径。
请注意,类文件夹仅用于类。