在php驱动的web应用程序中使用mvc设计模式


Using mvc design pattern in php driven web applications

我最近一直在阅读stackoverflow上关于mvc的教程和问题,我需要问几个问题,看看我是否正确理解了基本概念。

  • 据我所知,在大多数情况下,只有一个视图对象来渲染多个视图(html文件)就足够了。这是正确的吗
  • 将表示逻辑放在视图文件中是否比将其放在视图对象中更好,以避免给视图层增加额外的复杂性
  • 众所周知,拥有一个索引页并根据请求url和文件名自动加载控制器是一种很好的做法。但是,这不意味着每个请求url都有控制器吗?可以将一些请求url分组并映射到一个控制器吗。(在索引页上有多个if-else语句或将信息放入数组配置文件中)
  • 如果我有一个视图对象,那么与该对象和控制器的关系必须是1:1。这是真的吗
  • 最后,如果我需要从控制器向视图传递大量信息,并且其中一些信息在其他控制器中重复;在作为其他控制器的父控制器的基础控制器中,这是处理这些重复信息的好方法吗

正如你所看到的,我仍然很困惑。提前谢谢。

嗯。。。这是一个棘手的问题。。。作为一个一般规则,MVC被设计为解耦这3个通常交织在一起的组件。

如果您的模型不能同时支持多个视图,那么它就不是MVC

如果你的模型与你的控制器对话,或者甚至知道它的存在(这也适用于视图),那么它就不是MVC。

如果视图和控制器之间的比例为1:1,则很可能不是MVC。您应该能够从系统中交换出这3个组件中的任何一个,主要只需更改配置即可。

这是一个极为误用的术语,对MVC的"尝试"往往以MVC概念所设计的极为耦合的代码而告终。

用PHP实现MVC的方法不止一种。

一个类支持一切(全局控制器)。它加载你的类,处理URI以知道哪个控制器启动,它检查你的数据(GET、POST),它检查用户会话(它过期了吗?有人登录吗?他是管理员吗?)。

许多类支持交互性(控制器)。一个管理新闻的类,一个管理用户的类,等等。。。使用静态方法为每个用户建模动作。基本上是"添加一个新项目","删除一个项目","更新一个项目"。

许多类说明事物是如何组织的(模型)。您的用户有登录名、哈希密码、电子邮件地址等。。。有关更多信息,请参阅DAO。(基本上,所有SQL都在这些类中)。这些类只检查给定的数据是否符合预期。

许多类告诉如何显示事物(视图)。由提供所需内容(对象、数组、输出数据)的控制器调用唯一有HTML的地方,以及更复杂的地方,是一个循环中的一个循环,创建一个完整的HTML。你会有一个显示"一条消息在一个居中的框中",一个显示了"一个元素列表",另一个显示的是"一个单一元素",还有一个显示一个作者侧边栏的单一元素,等等

HTML模板/元素对构建视图很有用,但调用模板/元素并按照视图的要求放置它们的是视图。