背景
我在理解如何在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)。
问题:
由于categories
,users
和event-type
各自具有与之相关的独特功能(即编辑用户,操纵事件等),因此它们都是自己的控制器(对?)。由于event-type-A
和event-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
。我只是对我如何设置每个控制器(定义哪些方法等)以使它们正确地协同工作感到困惑。
答案 0 :(得分:1)
看起来this answer提供了令人满意的解决方案。
本质上:
使用 HMVC 在需要时加载必要的MVC三元组。
我之前从未听说过HMVC
,但显然它允许我指定何时调用某些MVC三元组,这最终会让我控制何时调用不同的控制器。这将允许每个部分(categories
,events
,types
等)充当独立模块,这些模块具有可以调用的index
页面,但是还可以根据需要提供更精细的数据。
答案 1 :(得分:0)
如何将/categories/event-type-A
和/categories/event-type-B
更改为/categories/events/type
?哪些type
可以是A
或B
之一(或类似内容)?