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

Posted

技术标签:

【中文标题】如何将此列表组织到 mvc 中?【英文标题】:How do I organize this list into mvc? 【发布时间】:2015-04-27 16:30:03 【问题描述】:

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

model.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);


controller.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-&gt;model = new model();

我还有一个 index.php 用于开始会话和define("BASE_URL", 'http://' . $_SERVER['SERVER_NAME'] . '/printstore/index.php/');

应用程序正在运行。我已经可以注册用户、登录和购买。我似乎无法正确理解这部分代码。 将不胜感激一些帮助!抱歉发了这么长的帖子,提前谢谢你。

【问题讨论】:

让我们停止侮辱,人们。我已经清理了这些 cmets,因为它们没有任何生产力。专注于手头的技术问题。 【参考方案1】:

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

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

我个人喜欢使用模板引擎(也与 MVC 无关)。我很喜欢Smarty,但我也听说过关于mustache 的好故事。

这些模板引擎为您提供了一种将变量传递给模板的方法,而无需包含控制器文件。例如在 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/ 在 PHP 中包含文件:Passing a variable from one php include file to another: global vs. not

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

【讨论】:

不是我。我不知道谁对答案投了反对票……我投了赞成票。感谢您的时间。我会努力的! 看看这里:sitepoint.com/the-mvc-pattern-and-php-1 我认为在那里阅读对你有好处。它告诉您如何设置 MVC 的基础知识(不使用任何模板引擎)。也不确定您当前的代码是什么(控制器是一个类吗?)。 这也可能对您有所帮助:***.com/questions/4675932/… 被否决,因为:推荐使用全局变量,暗示“模板”和“视图”是一回事,推荐使用Smarty。基本上,你告诉 OP 使用的东西是有害的。 @tereško 实际上,我不建议使用全局变量。我说他可以用全局变量来做到这一点(这是可以做到的)。我建议使用模板引擎。如果您有任何指向 Smarty 是“有害”的链接,我会很高兴阅读它! :) 也不意味着视图和模板是相同的顺便说一句。没错,我应该指定不使用全局变量。将编辑它。

以上是关于如何将此列表组织到 mvc 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.Net MVC 中将列表对象显示到视图中?

如何绑定到列表作为 MVC 3 Razor 中模型上的属性?

如何将此 random.choices python 列表转换为字符串?

如何在 ASP.NET MVC 中组织 DAL [关闭]

如何在 MVC 中发布项目列表

如何将此列表转换为字符串?