巢还是不巢? MVC控制器(CodeIgniter)

时间:2012-05-01 11:39:52

标签: php codeigniter hierarchical codeigniter-routing

背景

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

我有一个遵循此URL方案的webapp:

  • / - 主要索引
  • /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,因为如果event-name存在,则会自动更正格式错误的URL(错误id# s)。

问题:

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

你如何建议我组织我的控制器,使他们遵循OOP和MVC设计中的“标准练习”?

我的静态页面目前有一个Pages类,我希望有一个categories类来调用users类,event-type-A和{{1 (如上所述)类是event-type-B类的扩展......但是从这里我不确定如何最好地继续。

非常感谢任何简单/伪代码示例。

其他信息:

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

更新

作为Ako mentioned below,我绝对可以将events组合到一个控制器中,然后从中生成两个events。我只是对我如何设置每个控制器(定义哪些方法等)以使它们正确地协同工作感到困惑。

2 个答案:

答案 0 :(得分:1)

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

本质上:

  

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

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

答案 1 :(得分:0)

如何将/categories/event-type-A/categories/event-type-B更改为/categories/events/type?哪些type可以是AB之一(或类似内容)?