【问题标题】:Kohana children controllers with HMVCKohana 带 HMVC 的儿童控制器
【发布时间】:2011-12-23 18:03:27
【问题描述】:

我有一个主控制器,我想用 HMVC 从这个控制器调用子控制器。我设置了一个规则,将参数路由到特定操作,该操作使用“Request::factory”为主控制器调用子控制器,但由于无限循环,它不起作用。有什么办法吗?

我必须使用 HMVC,因为主控制器会向子控制器发送一些信息,所以我需要一个控制层。

这将是一种用于 CMS 的 crud 应用程序的插件。

主控制器:http://pastebin.com/nt2fhMEy

子控制器示例:http://pastebin.com/WqaHZaxf

路由:http://pastebin.com/6JGFf2i2(我还没有配置caction和cid。)

额外说明:这将是我的 CMS 的一个 crud 模块。主控制器将加载主模板和一些配置。主控制器还包括一些 ORM 函数,子控制器必须能够使用 parent::functionname。子控制器位于 cruds/ 目录中,cms 自动创建它们。

【问题讨论】:

  • 如果您认为这不是一个好方法或不明白我想要做什么,请分享您的意见。
  • 我认为如果您解释为什么要这样做会有所帮助。 Kohana 中没有儿童控制器的概念,将其组合在一起可能不是一个好主意。为什么不能有没有子/父关系的简单控制器?
  • 我更新了问题,谢谢。

标签: kohana php hmvc


【解决方案1】:

您对控制器和 HMVC 的想法存在一些错误。

最好的方法是使用面向对象的控制器。我的意思是“子控制器”需要扩展主控制器。

让主控制器扩展Controller_Template,子控制器扩展主控制器。

当您通过路由向子控制器发送请求时,您不仅可以访问父属性,而且您的请求将执行以下操作:

  1. 主控制器方法之前
  2. 子控制器的方法之前。
  3. 子控制器的操作。
  4. 子控制器的After方法。
  5. 父控制器的After方法。

根据我从您的问题中得到的信息,您根本不需要 HMVC。实际上,这是传递数据的一种非常糟糕的模式。请记住,当您通过 HMVC 执行内部请求时,这实际上是一个全新的请求。它将再次通过路线和此列表。您将无法访问之前的所有请求属性。

另一个提示:不要将 ORM 函数放在主控制器中。请改用实际的 ORM 模型。

【讨论】:

  • 谢谢,实际上我创建了一个 crud 模块,当我想创建一个新的 crud 控制器时,我从 Controller_Crud 或 Controller_Template_Crud 扩展。现在可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多