如何将此列表组织到 mvc 中


How do I organize this list into mvc?

我想列出我店里最畅销的印刷品。我有一个表格(print_for_sale(,上面有fk_sale_id和fk_print_id,我可以看到已经购买了多少印刷品。

我想出了这个代码来打印出一个有组织的列表,从购买最多到最少(不确定它是否完全正确(:

<?php 
$sql = "SELECT fk_print_id as printId, COUNT(print_for_sale_id) as saleCount
                FROM print_for_sale
                GROUP BY fk_print_id
                ORDER BY saleCount DESC";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {     
       echo $row['printId'];  echo $row['saleCount']; }

  ?>

正在尝试将其过渡到我的模型,控制器和视图(mvc(,但是我遇到了很多麻烦。我是新手,我尝试了很多不同的方法,但似乎都没有奏效。我迷路了。现在我有这样的(它什么也没打印出来(,或者当我在我的视图中发出回声时,它打印出的唯一内容是"注意未定义的变量 arr">

型号.php

function getBestSelling() {
    $sql = "SELECT fk_print_id as printId, COUNT(print_for_sale_id) as saleCount
            FROM print_for_sale
            GROUP BY fk_print_id
            ORDER BY saleCount DESC";
    $result = $this->conn->query($sql);
    return $this->buildArr($result);
}

控制器.php

function bestselling() {
    $arr = $this->model->getBestSelling();
    print_r($arr);
    include 'view.php'; 
    } 

查看.php

<?php echo $arr['printId'] ?>

我想打印出查询结果,但没有任何效果。如果这不是一个合适的问题,我很抱歉,但我真的可以使用一些帮助来理解这一点。

我没有使用任何框架。

在我的模型中,我确实有一个class model { },一个function __construct()和一个function __destruct()。我还有一个构建数组的函数。

function buildArr($result) {
    $arr = array();
    while ($row = $result->fetch_assoc()) {
        array_push($arr, $row);
    }
    return $arr;
   }

在我的控制器中,我include 'model.php';并有一个class Controller {}function __construct() { $this->model = new model();}.

我还有一个索引.php我从中开始会话并define("BASE_URL", 'http://' . $_SERVER['SERVER_NAME'] . '/printstore/index.php/');

该应用程序正在运行。我已经可以注册用户,登录并进行购买。我似乎无法正确理解这部分代码。将不胜感激!很抱歉这篇文章很长,提前感谢您。

包含的文件没有按预期运行。要做到这一点,你必须从变量中创建一个全局变量(但不要这样做!您可以在控制器中print_r()数组,因为您是从模型中获取数组的。但在那之后,你包括视图。当您将该数组放在包含的文件中时,而不在文件本身中定义它,您将不会得到结果,因为只有包含文件可以访问任何定义的变量。反之则不然。

因此,如果您希望此功能正常工作,则必须将变量$arr全局(不推荐(,或者将控制器包含在view.php中。(请注意,这不是MVC!如果希望这是 MVC,则必须为控制器使用类并在视图中使用这些对象。要找到更好的解释,请参阅下面的链接。

我个人喜欢使用模板引擎(也不与 MVC 相关(。我很喜欢Smarty,但我也听说过关于小胡子的好故事。

这些模板引擎为您提供了一种将变量传递到模板的方法,而无需包含控制器文件。例如在 Smarty 中:
.PHP:

$variable = 'Hello World!';
$smarty->assign('variable', $variable);
$smarty->display('helloworld.tpl');

聪明,你好世界.tpl:

{$variable}

输出: Hello World!

我还建议您阅读这些内容,它们可能会比我无法解释的更能帮助您。

  1. 在 PHP 中设置 MVC:http://www.sitepoint.com/the-mvc-pattern-and-php-1/
  2. 在 PHP 中包含文件:将变量从一个 php 包含文件传递到另一个:全局与非

编辑
Teresko 是对的,你不应该使用全局变量。我只是在这里指定了它们,因为可以使用它们(绝对不推荐(。阅读这个问题以了解几个原因:停止在PHP中使用"global">