如何将此列表组织到 MVC 中?

问题描述 投票:0回答:1

我想列出我店里最畅销的印刷品列表。 我有一个表(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';
    }

view.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();}

我还有一个 index.php,我可以在其中开始会话,并且

define("BASE_URL", 'http://' . $_SERVER['SERVER_NAME'] . '/printstore/index.php/');

应用程序正在运行。我已经可以注册用户、登录并进行购买。我似乎无法正确理解这部分代码。

php mysql list model-view-controller count
1个回答
1
投票

包含的文件的行为不符合您的预期。要实现这一点,您必须从变量中创建一个全局变量(但不要这样做!)。您可以在控制器中

print_r()
数组,因为您是从模型中获取它。但之后你就可以包含视图了。当您将该数组放入包含文件中,而不在文件本身中定义它时,您将不会得到结果,因为只有 include 文件可以访问任何已定义的变量。不是相反。

因此,如果您希望它起作用,您必须将变量

$arr
设置为全局变量(不推荐),或者将控制器包含在
view.php
中。 (请注意,这不是 MVC!)如果您希望这是 MVC,则必须使用控制器类并在视图中使用这些对象。要找到更好的解释,请参阅下面的链接。 我个人喜欢使用模板引擎(也与 MVC 无关)。我很喜欢

Smarty

,但我也听说过关于小胡子的好故事。 这些模板引擎为您提供了一种将变量传递到模板的方法,而无需包含控制器文件。例如在 Smarty 中:

PHP:


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

Smarty,helloworld.tpl:

{$variable}

输出:
Hello World!


我还建议您阅读这些内容,它们对您的帮助可能超出我所能解释的范围。

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

Teresko 是对的,你不应该使用全局变量。我只是在这里指定它们,因为可以使用它们(绝对不推荐)。 阅读这个问题了解几个原因:Stop using `global` in PHP

© www.soinside.com 2019 - 2024. All rights reserved.