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

时间:2011-07-14 10:29:44

标签: php model-view-controller

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

我认为我的概念是错误的,因为目前我的大多数处理都是在视图中完成(或至少是由其启动)。 - 我从我正在为之工作的公司那里继承了这种思维方式,但现在我不确定他们是否正确理解了MVC模型!

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

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

<小时/> 我也有一些困难,决定视图是否应该具有任何真正的功能。

即。它只是一个包装器来保存页面数据并加载所需的模板文件(页眉,页面,页脚等),或者任何与渲染数据相关的函数(即准备HTML和输出HTML)是否都在视图中?

<小时/> 另一个问题是控制器是否“移交”到模型并且与实际的DBconn无关(因此模型在DB夜总会的门上就像一个Bouncer,我们不在列表中)或者是控制器“拥有”DBconn并在需要时简单地将其借给模型?


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

由于


编辑 - 我发现this有帮助!

2 个答案:

答案 0 :(得分:2)

我会回答你最近的两个问题:

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

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

答案 1 :(得分:2)

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

回答你的问题:

视图应该只是表示,因此在视图中迭代模型列表并输出它们很好,但视图中的处理数据不是。

模型不应该假设控制器和视图。您应该很容易在从数据库中提取数据的模型与从其他类型的数据源中提取数据的模型之间切换,这不应该确定Controller中的更改。 Fabrizio是对的,您应该查看DAO模式以获取有关如何执行此操作的示例。

我真的建议看看实现MVC的框架,看看他们是如何做到这一点的。特别是Spring - 即使你不是Java人,实现也很干净 - ,Rails,Symfony。对于更奇特的东西,请看看Django。