没有“动作”的控制器和页面? MVC

时间:2015-05-13 20:26:27

标签: php model-view-controller web

据我了解,“MVC”出现在网络之前,例如经常用于桌面软件。

如果我理解正确, Controller 会在用户点击按钮时运行,这将触发操作。

但是,如果我们谈论网页,情节就会有所不同,假设用户点击了一个链接,那么就会触发一个动作。

然后,让我怀疑,是控制器 home 页面的一部分吗?

我的意思是,主页通常不是由网站内的用户操作执行的只是 home ,但是注意到许多PHP框架使用 Controller home ,这是正确的吗?

另一个疑问是在我的“home”我有几个项目,例如:

  • 横幅
  • 精选帖子
  • 最近的帖子

这些项目中的每一项都有不同的模型,我可以将多个模型视图调用到控制器中

这些是正确的步骤吗?或者大多数php框架都不严格?

1 个答案:

答案 0 :(得分:1)

你完全正确,我理解这种困惑。

在纯MVC方法中,Controller仅侦听用户操作并相应地更新模型。然后,模型通知View(通过Observer设计模式)和View更新本身,从Model访问它需要的数据。 这就是在Web之前,在桌面应用程序中,模型和视图同时运行,以及模型可以通知View的位置。 Controller不会设置视图。

在这个纯MVC模型中,您提到的关于主页的示例确实不需要Controller。 View只会渲染自己,通过Model访问它所需的数据。控制器非常薄,只能监听用户操作并更新模型。这就是他们所做的一切。

在网络中,此模型无法实现,因此有其他方法。模型无法在纯模型中通知View,因此流行框架要求您执行的操作是在Controller中设置View。这就是为什么主页需要一个控制器的例子,因为你将在那里设置你需要的所有数据。

然而,还有另外一种我亲自编写的方法,其中控制器没有设置允许您保留微型控制器的View。您可以在此处阅读:A better OOP approach to building MVC applications

因此,我认为主页根本不需要控制器操作。 View应该只渲染自己并访问它需要渲染的数据。如您所述,Controller的作用是处理用户操作并相应地更新模型。如果它不止于此,则可能违反了SRP。控制器不应设置视图,而是设置the View should get its own data from the Model