【问题标题】:To Nest or Not to Nest? MVC Controllers (CodeIgniter)嵌套还是不嵌套? MVC 控制器 (CodeIgniter)
【发布时间】:2012-05-10 22:44:02
【问题描述】:

背景:

我在理解如何在 MVC 架构中最好地使用控制器时遇到了一些麻烦。

我有一个遵循此 URL 方案的 web 应用程序:

  • / - 主索引
  • /static-page - 静态页面
  • /categories - 特定类别的索引
  • /categories/users - 特定类别用户的索引
  • /categories/users/id#/user-name - 特定类别的特定用户
  • /categories/event-type-A 特定类别相关事件的索引
  • /categories/event-type-A/id#/event-name - 特定类别的特定事件
  • /categories/event-type-B 特定类别相关事件的索引
  • /categories/event-type-B/id#/event-name - 特定类别的特定事件

*注意:此 URL 结构类似于 StackOverflow 的,如果存在 id#,则会自动更正格式错误的 URL(错误的 event-names)。

问题:

由于categoriesusersevent-types 都具有与之相关的独特功能(即编辑用户、操纵事件等),它们都是自己的控制器(对吧?)。由于event-type-Aevent-type-B 非常相似,它们共享从events 类扩展而来的通用功能。

您建议我如何组织我的控制器,使其遵循 OOP 和 MVC 设计中的“标准实践”?

我目前有一个用于静态页面的Pages 类,我希望有一个categories 类调用users 类、event-type-Aevent-type-B 类(如上所述)是events 类的扩展...但是从这里我不确定如何最好地进行。

任何简单/伪代码示例将不胜感激。

其他信息:

仅供参考:我正在使用 PHP/MySQL。我一直在尝试通过编写自己的框架来学习 MVC,但最近切换到了 CodeIgniter。话虽如此,CodeIgniter 特定解决方案或通用 MVC 解决方案都足够了。

更新:

作为Akomentioned below,我绝对可以将events 合并到一个控制器中,然后从中生成两个type。我只是对如何实际设置每个控制器(定义哪些方法等)以使它们正常工作感到困惑。

【问题讨论】:

    标签: php codeigniter hierarchical codeigniter-routing


    【解决方案1】:

    /categories/event-type-A/categories/event-type-B 更改为/categories/events/type 怎么样?其中type 可能是AB(或类似的东西)之一?

    【讨论】:

    • 简单的偏好。 event-type-Aevent-type-B 的大部分代码都可以重用,但不是全部。因此,我不希望他们被列为events 的孩子,我宁愿让他们分开(主要用于 SEO 目的)。不过,感谢您的建议....除非有一种简单的方法可以使用您的方法来实现此目的,同时从路径中隐藏 events 目录。
    • 假设我继续并按照您的建议创建与方案/categories/events/type/id#/event-name 匹配的控制器,我将如何定义我的控制器以使其工作?我想你有categorieseventstypes 的控制器,但是,如问题中所述,我不明白如何正确设置方法以使其工作。你能指导我完成整个过程吗?
    【解决方案2】:

    看起来this answer 提供了一个令人满意的解决方案。

    本质上:

    在需要时使用 HMVC 加载必要的 MVC 三元组。

    我以前从未听说过HMVC,但显然它允许我指定何时调用某些 MVC 三元组,这最终将让我控制何时调用不同的控制器。这将允许每个部分(categorieseventstypes 等)充当独立的模块,这些模块有自己的可调用的 index 页面,但也可以提供服务很多根据需要提供更详细的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      相关资源
      最近更新 更多