据我了解,“MVC”出现在网络之前,例如经常用于桌面软件。
如果我理解正确, Controller 会在用户点击按钮时运行,这将触发操作。
但是,如果我们谈论网页,情节就会有所不同,假设用户点击了一个链接,那么就会触发一个动作。
然后,让我怀疑,是控制器的 home 页面的一部分吗?
我的意思是,主页通常不是由网站内的用户操作执行的只是 home ,但是注意到许多PHP框架使用 Controller home ,这是正确的吗?
另一个疑问是在我的“home”我有几个项目,例如:
这些项目中的每一项都有不同的模型,我可以将多个模型和视图调用到控制器中
这些是正确的步骤吗?或者大多数php框架都不严格?
答案 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。