MVC,我做错了吗?

时间:2012-01-06 14:50:48

标签: php model-view-controller

我正在尝试理解MVC的事情,到目前为止我知道它用于将业务逻辑与视图逻辑(HTML和CSS之类的东西)分开,但是当我需要组织文件时,我失败了。

假设我有3个文件:

  • form.php显示给用户,它需要用户输入和 提交数据
  • process.php,它接受并处理来自form.php的数据 连接到数据库并检索请求的信息
  • display.php以有条理的方式显示来自process.php的已处理数据(结果)

所以看看我的例子:

  • form.php将是控制器
  • process.php将是模型和
  • display.php将是视图

右?

6 个答案:

答案 0 :(得分:7)

错了,其实你在process.php中混合模型和控制器。

form.php和display.php只与用户交互,它们充当视图。

process.php充当Controller和Model

您应该将Controller和Model分开。你可以创建一个separte model.php并在那里做数据库的东西。因此,如果将来您需要更改数据库内容。你不需要触摸process.php。控制器和模型也将彼此分开

答案 1 :(得分:5)

我想说更像

  • form.php - 查看
  • process.php - Controller
  • display.php - 查看

没有实际的型号。如果你有一个数据结构来表示someDataClass.php中的数据,那将是一个模型。

您想要的是分离UI(视图),数据处理(控制器)和数据定义(模型)。

答案 2 :(得分:0)

不完全。
process.php是模型(它努力工作 - 使用数据库)
form.php和display.php是视图(显示给用户)

但是没有控制器。 控制器就像是模型和视图之间的粘合剂。控制器从View获取数据并说:“我将通过此模型处理它”。并且在处理之后它从Model获得结果并且说:“我将通过该视图向用户显示数据”

答案 3 :(得分:0)

这并不正确,正如rao_555所说。例如,控制器将没有向用户显示的表单。如果您有一个表单,然后是数据显示,那么这些都是单独的视图。

这是一个非常简洁的设计模式描述: http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view-controller.html

答案 4 :(得分:0)

查看Wikipedia我也从这里开始形式了解MVC。如果你想开发自己的MVC框架,我可以强烈建议你先学习已经有很多选项的MVC框架(即CodeIgniterYii等)。祝你好运......

答案 5 :(得分:0)

MVC对解释非常开放。

然而,在你的情况下,有一点很清楚,“显示”是你的V(视图),“过程”是你的M(模型)。

问题是......“形式”真的是“C” - 控制器吗?

有几种方法可以看这个。实际上,正确的方法是让你的表单服务(Symfony,Laravel和ZF2使用的模式)。 然后你将表单对象传递给你的视图以在display.php中呈现表单,一旦表单被POST,你就会使用类似的东西:

// this will likely happen in your controller action 
$form->setData($postData);
$form->validate();

另一方面,在CakePHP中,表单进一步分解为验证和用户输入“部分”。因此验证成为“M”的一部分,用户输入保持“V”。