PHP中的MVC模型-纠正流程顺序和分离

PHP中的MVC模型-纠正流程顺序和分离,php,model-view-controller,Php,Model View Controller,我需要帮助澄清PHP中MVC应用程序的正确结构和流程 我认为我对这个概念的理解是错误的,因为目前我的大部分处理都是由视图完成的(或至少是由视图发起的)我从我工作的公司继承了这种思维方式,但现在我不确定他们是否正确理解MVC模型 再看一遍,我认为过程应该如下(非常基本): 用户操作将发送到控制器 控制器使用所需的任何模型处理这些动作 然后,控制器实例化相关视图并将所需数据传递给它 视图将页面呈现给用户 我还很难决定视图中是否应该包含任何真正的功能 i、 e.它只是一个包装器,用于保存页面数据

我需要帮助澄清PHP中MVC应用程序的正确结构和流程

我认为我对这个概念的理解是错误的,因为目前我的大部分处理都是由视图完成的(或至少是由视图发起的)我从我工作的公司继承了这种思维方式,但现在我不确定他们是否正确理解MVC模型

再看一遍,我认为过程应该如下(非常基本):

  • 用户操作将发送到控制器
  • 控制器使用所需的任何模型处理这些动作
  • 然后,控制器实例化相关视图并将所需数据传递给它
  • 视图将页面呈现给用户

我还很难决定视图中是否应该包含任何真正的功能

i、 e.它只是一个包装器,用于保存页面数据并加载所需的模板文件(页眉、页面、页脚等),还是视图中应该包含与呈现数据相关的任何函数(即准备HTML和输出HTML)


另一个问题是,控制器是否“移交”给模型,而与实际的DBconn无关(因此模型在DB夜总会的门上扮演保镖的角色,而我们不在列表中),或者控制器是否“拥有”DBconn,并在模型需要时将其借给模型


我非常感谢任何人能提供的帮助和建议

谢谢



编辑--我觉得很有用

我将回答最后两个问题:

1) 视图应该具有基本的输出功能,例如转义值以避免安全问题,或者显示从对象列表开始的html表。另一个职责是转换标签和其他常量值(例如,您可以使用$this->(您的标签),其中函数($val)是所有视图类中包含的一个函数,用于转换从csv文件开始的字符串)


2) 根据应用程序的复杂性,模型层中可能有两个子层。上层是具有实体功能的经典模型。较低级别是执行db操作的相关资源模型类。您还可以在模型中有一个层来实现DAO模式。无论如何,控制器不应该与数据库连接无关。

您的项目符号假设是正确的:)。MVC背后的主要思想是组件之间的松耦合和可互换性

回答您的问题:

视图应该只是表示性的,因此遍历视图中的模型列表并在那里输出它们是很好的,但是处理视图中的数据不是很好

模型不应假设控制器和视图的任何内容。在从数据库提取数据的模型和从另一种类型的数据源提取数据的模型之间切换应该很容易,这不应该决定控制器中的更改。Fabrizio是对的,您应该查看DAO模式以获得如何实现这一点的示例


我真的建议大家看看实现MVC的框架,看看它们是如何实现的。特别是——即使您不是Java爱好者,实现也非常干净——Rails,Symfony。想了解更多异国情调,请看看Django。

嘿,谢谢!你的第二个答案就是我所想的。但首先要澄清的是:视图应该处理格式化和输出的数据,例如,控制器传递一组数据(比如商店商品),视图循环通过这些数据生成HTML?谢谢,自从Fabrizio第一次开始工作以来,我已经接受了他的回答,但我非常感谢您的澄清!(+1)我看过CodeIgniter和CakePHP,我喜欢symphony(从他们的网站上)的外观,但我还没有使用它。在我工作的地方,我必须建立一个自定义框架再次感谢!