【问题标题】:MVC, am I doing it wrong?MVC,我做错了吗?
【发布时间】:2012-01-06 14:50:48
【问题描述】:

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

假设我有 3 个文件:

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

看看我的例子:

  • form.php 将是控制器
  • process.php 将是模型和
  • display.php 将被查看

对吗?

【问题讨论】:

  • 查看任何著名 PHP 框架的源代码:CI/Kohana、Cake 等...这应该让您更好地了解如何在 PHP 项目中实现 MVC

标签: php model-view-controller


【解决方案1】:

错了,其实你是在 process.php 中混合了 Model 和 Controller。

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

process.php 既是控制器又是模型

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

【讨论】:

  • 所以在 process.php 中我将编写处理用户输入的代码(例如验证它),然后将处理过的数据 process.php 发送到 database.php,它与数据库交互并检索请求的信息。在这种情况下,我将有 2 个视图(form.php、display.php)、1 个控制器(process.php)和 1 个模型(database.php)
  • 完全正确..你将有 2 个视图。
【解决方案2】:

我会说更多

  • form.php - 查看
  • process.php - 控制器
  • display.php - 查看

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

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

【讨论】:

  • 此外,如果display.php 上显示任何内容,他会混合vcform.php 向用户显示信息(视图),操作/路由用户的数据(控制器),并在 db(模型)中表示应用程序数据
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        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”保持一致。

        【讨论】:

          猜你喜欢
          • 2019-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-02
          • 1970-01-01
          相关资源
          最近更新 更多