【问题标题】:How to implement HMVC using Kohana's cascading file system如何使用 Kohana 的级联文件系统实现 HMVC
【发布时间】:2011-11-12 18:20:32
【问题描述】:

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

【问题讨论】:

  • 图中仅表示逻辑继承,并且仅在控制器之间。物理分离对此有何影响?你试过什么?
  • 我的假设/希望是可以在文件系统中实现 HMVC 模式的物理表现,以镜像逻辑模式。否则控制器将指向所有地方,并且 HMVC 的模块化优势将丢失。

标签: kohana kohana-3 hmvc


【解决方案1】:

不确定您是否想破解处理视图的方式,但您可以扩展 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,
    ));
}

【讨论】:

  • @Nathan- 谢谢。我只是不认为我需要破解级联文件系统,因为它应该是围绕 HMVC 构建的......但看起来你可能是对的,这是唯一的方法 - 有点奇怪。
  • 请不要将 View 类的模板放在类文件专用的文件夹中。我想我现在明白了你想要什么,即将进行编辑。
  • 我认为 Yarin 想要一种方法来存储带有控制器/模型的视图模板以进行组织,并且仍然保持默认的 Kohana 功能(即使用 View::factory($filename))。当然,最好实现一个结构,在控制器/模型旁边添加视图类,并将模板留在其他地方。
【解决方案2】:

但据我所知,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_ 前缀,因此它们最终位于类/视图中。但是没有什么能阻止您创建一个 View_ 类,该类为您放入 views 文件夹的每个模板扩展 View 并硬编码该 View-Model 的路径。

请注意,classes 文件夹仅用于类。

【讨论】:

  • @Darsstar- 我认为您的意思是:虽然 Kohana 2 文件系统允许在文件系统中嵌套 MVC 三元组,但 Kohana 3 强制将模型-控制器类与视图分离排除了它?跨度>
  • 如果您选择仅使用 View 类作为您的 View-Model,您选择将逻辑移动到您的模板。如果您要为每个模板创建视图模型并将逻辑放入这些视图模型中。然后模板只能控制应该去哪里。由于视图模型是类,它们应该进入类文件夹。而且由于您显然希望它们都在同一个子文件夹中,因此您应该给它们 View_ 前缀。然后你得到你想要的分离。所以你是在说服它,而不是 Kohana。 Kohana 开箱即用了一个糟糕的 View-Model。
猜你喜欢
  • 2016-03-26
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
相关资源
最近更新 更多