【发布时间】:2013-11-23 05:23:18
【问题描述】:
概述:我正在使用 PHP 构建一个 CMS,并且我正在尝试使用 MVC 来实现它。我正在尝试使用this structure 扩展我的代码,因为它代表了 MVC 的准确表示,而且非常简单。为了与我的数据库通信,我使用域对象和数据映射器。
问题:
- 真的有必要在模型、视图和控制器之间进行 1:1:1 映射吗?
示例:对于博客系统,在显示博客条目页面时,我将创建一个名为 DisplayEntryController 的控制器和一个名为 DisplayEntryView 的视图。视图将从 BlogMapper 类(与 DB 通信以检索当前博客条目)和 CommentMapper 类(与 DB 通信以检索当前博客条目的 cmets)获取其信息。考虑到该视图适用于 2 个模型对象,这是一种好的做法吗?如果不是,还有什么选择?如果是,如何以通用方式实现?
- 多个控制器可以处理一个页面吗?对于上面的示例,是否可以让 DisplayEntryController 和 CommentController 处理显示博客条目的页面的相关部分?如果是,这 2 个控制器将如何协调?
提前谢谢你。示例将不胜感激。
我在网上看到的大多数 PHP MVC 实现都使用页面方法来组织它们的 MVC。例如。对于主页,您有一个视图、一个控制器和一个模型。 MVC 中 1:1:1 映射的路由很简单,因为您可以强制 MVC 组件的位置和命名,当主页请求到来时,它会自动查找以下类:HomeView HomeController 和 HomeModel。
这显然不适用于大型项目。应该如何处理路由以支持路由到多个模型(DataMapper)、多个视图,而不创建过于复杂的路由器或添加复杂的依赖注入层?
示例:如上所述,在显示博客条目时,您会显示 博客条目代码和评论部分。为了实现这一点,它 与两个 DataMapper 通信,一个获取博客条目, 以及为博客返回 cmets 的那个。怎么可能景色 被分配与这两个数据映射器一起工作以从中获取数据 数据库?
【问题讨论】:
-
不,在 MVC 部分之间进行 1:1:1 映射实际上是错误的,因为这些“部分”甚至不在同一个“权重组”中。模型是一个层,而控制器和视图是类。并且多个控制器可以从同一页面访问,但我不知道您所说的“坐标”是什么意思。
-
MVC 中 1:1:1 映射的路由很简单,因为您可以强制 MVC 组件的位置和命名,并且当对主页的请求出现时,它会自动查找以下类: HomeView HomeController 和 HomeModel。当视图与多个模型(DataMappers)通信时如何处理路由,而不添加复杂的依赖注入层?
-
示例:如上所述,在显示博客条目时,您会显示博客条目代码和评论部分。为此,它与两个 DataMapper 通信,一个获取博客条目,另一个返回博客的 cmets。如何分配视图与这两个数据映射器一起工作以从数据库中获取数据?
-
@Constantin,添加您的 cmets 作为答案。
-
@crafter 为什么要告诉某人将他的附加问题添加为答案?!?!
标签: php model-view-controller content-management-system datamapper