0

我读过 MVC 模式,整个 php 逻辑必须在模型中,但是当我们遇到这样的情况时:从模型传递mysqli_result对象到视图,并且在视图中我们需要检查某个列(mysql 表列)的值并根据这个值,即我们认为

while ($row = $my_mysqli_result_object->fetch_assoc()) {
    if ($row['some_column'] == "1") {
        // print something
    }
    else if ($row['some_column'] == "2") {
        // print something other
    }
    else if ($row['some_column'] == "3") {
        // print something other
    }
    // ....
    // ....
}

如您所见,在视图中是 php 逻辑(逻辑很少,但存在)。

我的问题是:考虑到这种 php 逻辑,通常用于 MVC 概念?或者这不是 MVC 的正确方法,在这种情况下必须做其他事情?

4

3 回答 3

5

关于 MVC 的一些一般信息

MVC 设计模式的每个部分都有特定的角色。它是通过引入两种分离来完成的(由关注点分离原理引入的概念):

  • 系统内的模型层 [1]表示层将领域业务规则与可视化表示隔离开来
  • 表示层内的控制器视图确保 UI 生成和用户输入彼此独立

实际上,当您查看正确设计的模型层时,它还融合了针对不同任务的不同结构:应用程序逻辑、域逻辑或存储逻辑。

什么是意见?

有一个常见的误解,主要是由试图模仿它的 Rails [2]粉丝和框架长期存在的。View 不是一个愚蠢的模板

在 MVC 的现代解释中,当应用于 Web 时,视图是包含大部分 UI 逻辑的实例。是的,逻辑。View 应该从模型层获取信息,并根据它获得的数据决定生成什么响应以及它需要哪些模板来组装该响应。

数据的how获取是区分 MVC 启发模式(如 Model2 MVC、MVVM 和 MVP)的主要因素之一。

..现在实际上是关于原始问题:

编码。你展示的应该分开,因为它有两个不同的目标:从存储中检索信息和对输出做出决策。该fetch_assoc()位应该进入模型层(很可能在某些数据映射器实例中。并且您的switch( $someColumn )语句应该移动到视图实例。

作为一个无关紧要的说明,这个例子让我想到,你实际上是在处理那里的一些status专栏。在这种情况下,最好放弃if/elsewith 并使用$status = $listOfOption[ $someColumn ], where $listOfOptions = [0 => 'error', 1 => 'pending', 2 => 'unconfirmed', 3 => 'complete'];... 或类似的东西

您的视图应该决定如何表示该列以及必须将什么值绑定到模板。

于 2012-12-15T09:48:56.653 回答
0

在 MVC 模式中,所有逻辑都在控制器中,而不是在模型中。

该模型通常只携带数据。它可以验证数据的正确性(这是委托给模型的唯一详细说明)。

视图可以做很少的阐述——即它可以有一点点逻辑内部——但前提是它与表示方面有关。

回答你的问题:这个剂量的 php 逻辑是绝对正常和可以接受的。

于 2012-12-12T22:18:02.267 回答
0

您可以将该函数放入 PHP 模型类中,并使用 1 行代码在视图中调用它。

MyModelClass.php

class MyModelClass {

    public static function getData($someColumn)
        //Do Query and get result
        $data_array = null;
        while ($row = $my_mysqli_result_object->fetch_assoc()) {
            if ($someColumn == "1") {
                    // print something
            }
            else if ($someColumn == "2") {
                // print something other
            }
            else if ($someColumn == "3") {
                // print something other
            }
            // ....
            // .... BUILD DATASET ARRAY
            // ....
         }
         return $data_array;
     }
}
于 2012-12-12T22:20:18.387 回答