我有一个问题,适用于任何MVC框架,我正在使用Zend Framework MVC。
什么情况下应该创建新的控制器?控制器层应该定义什么?
我已经用MVC创建了几个应用程序,并逐渐变得更加可重用,但是我一直很难命名控制器类。大多数情况下,它匹配任何URL请求,因此涉及业务/前端逻辑。但在某些情况下,它似乎完全是任意的。
是否有人有一些启发式/指导方针可以遵循?似乎在所有关于MVC的炒作中,特别是对于PHP,实际约定和启发式数据很少。因为创建无组织的MVC应用程序相当容易...
我有一个问题,适用于任何MVC框架,我正在使用Zend Framework MVC。
什么情况下应该创建新的控制器?控制器层应该定义什么?
我已经用MVC创建了几个应用程序,并逐渐变得更加可重用,但是我一直很难命名控制器类。大多数情况下,它匹配任何URL请求,因此涉及业务/前端逻辑。但在某些情况下,它似乎完全是任意的。
是否有人有一些启发式/指导方针可以遵循?似乎在所有关于MVC的炒作中,特别是对于PHP,实际约定和启发式数据很少。因为创建无组织的MVC应用程序相当容易...
我通常为每个逻辑功能组设置一个控制器。这通常与每个模型对应一个控制器,但有时并非如此。
想象一下,您正在创建一个简单的在线目录,该目录显示类别列表,然后当用户选择一个类别时,显示该类别的产品列表,以及用于对类别和产品进行CRUD操作的管理员面板。我会有两个模型(CategoryModel
和 ProductModel
)。我会有一个控制器来为前端生成类别列表,另一个控制器来生成产品列表(例如,CategoryController
和 ProductController
)。然后我会在后端为类别和产品分别设置一个控制器(AdminCategoryController
和 AdminProductController
)。这两个后端控制器将处理各自模型的列表/添加/编辑/删除/查看操作。如果您仔细考虑URL结构,并将相关函数放在相关URL上,则您的控制器结构通常会与URL结构匹配。实际上,一些框架(例如CodeIgniter)的默认行为是基于控制器名称路由请求。
至于应该在控制器中放置什么,我认为模型用于数据访问,并包装和隐藏数据库结构。例如,“当状态设置为“完成”时,将当前时间赋值给完成日期”等逻辑非常适合模型。
视图包含您的整个演示文稿。控制器/模型不应生成或处理HTML。决策,例如2列或3列应该在视图中。视图中的逻辑应限于生成可见输出所需的逻辑。如果您发现自己想从视图查询数据库,则可能是将太多逻辑放入视图中。
控制器是干什么的?通常意味着验证输入,将表单数据分配给模型,选择正确的视图并实例化处理请求所需的模型。
大多数情况下,我遵循控制器-模型模式。我有一些控制器可能会为多个模型提供服务(例如管理控制器可以为几个管理模型提供服务),但通常的规则是每个业务模型一个控制器。