Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MVC,我做错了吗?_Php_Model View Controller - Fatal编程技术网

Php MVC,我做错了吗?

Php MVC,我做错了吗?,php,model-view-controller,Php,Model View Controller,我试图理解MVC的东西,到目前为止,我知道它用于将业务逻辑与视图逻辑(HTML和CSS)分离,但在需要组织文件时我失败了 假设我有3个文件: 显示给用户的form.php,它接受用户输入和 提交数据 process.php,它从form.php获取并处理数据,然后 连接到数据库并检索请求的信息 display.php,它以有组织的方式显示process.php中已处理的数据(结果) 看看我的例子: php将是控制器 php将是模型和 display.php将是视图 是吗?我想说得更像

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

假设我有3个文件:

  • 显示给用户的form.php,它接受用户输入和 提交数据
  • process.php,它从form.php获取并处理数据,然后 连接到数据库并检索请求的信息
  • display.php,它以有组织的方式显示process.php中已处理的数据(结果)
看看我的例子:

  • php将是控制器
  • php将是模型和
  • display.php将是视图
是吗?

我想说得更像

  • php-View
  • process.php-控制器
  • display.php-View
没有实际的模型。如果您有一个数据结构来表示someDataClass.php中的数据,那将是一个模型


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

错了,实际上您在process.php中混合了模型和控制器

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

php同时充当控制器和模型

您应该将控制器和模型分开。您可以创建一个separte model.php并在那里执行数据库操作。所以,如果将来您需要更改数据库内容。您不需要触摸process.php。控制器和模型也将彼此分开

不完全分开。
php是一个模型(它做艰苦的工作-使用数据库)
form.php和display.php是视图(向用户显示)

但是没有控制器。
控制器就像模型和视图之间的粘合剂。控制器从视图中获取数据并说:“我将使用此模型处理它”。经过处理后,从模型中得到结果,然后说:“我将通过这个视图向用户显示数据”

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

这是对设计模式的非常简洁的描述:
查看我也从这里开始了解MVC。如果你想开发自己的MVC框架,你可以,但我强烈建议你首先学习MVC框架,它已经有很多选项(例如,等等)。祝你好运…

MVC很容易被解读

然而,在您的案例中,“display”是您的V(视图),“process”是您的M(模型)

问题是。。。“表单”真的是“C”--控制器吗

有两种方法来看待这个问题。实际上,正确的方法是将表单变成服务(Symfony、Laravel和ZF2使用的模式)。 然后将表单对象向下传递到视图中,以在display.php中呈现表单,表单发布后,您将使用如下内容:

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

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

此外,如果
display.php
上显示任何内容,他会混合
V
c
form.php
向用户显示信息(视图),操作/路由用户数据(控制器),并在db(模型)中表示应用程序数据查看任何著名php框架的源代码:CI/Kohana、Cake等。。。这将使您更好地了解如何在PHP项目中实现MVC。因此,在process.PHP中,我将编写代码来处理用户输入(例如验证输入),然后处理后的数据process.PHP发送到database.PHP,database.PHP与数据库交互并检索请求的信息。在本例中,我将有2个视图(form.php、display.php)、1个控制器(process.php)和1个模型(database.php)。。你将有2个视图。