1

我是 Zend 框架的新手,想了解如何最好地循环数据库数据以生成链接列表。我的理解是模型应该包含大部分应用程序逻辑,控制器和视图尽可能轻。

我正在查询数据库以获取一组记录,我想遍历它们并生成 HTML 链接。下面的伪代码。

控制器:

$this->view->myList = MODEL->generateHtml();

模型:

function generateHtml() {
    query db

    loop through record set

    build a string of html within loop including links

    return string to controller

}

看法:

echo $this->myList;

这似乎将逻辑放入模型中,并将控制器灯和视图仅用于渲染。

我遇到的一个问题是我想$this->view->url在输出的 html 中生成路由链接,但不能在模型中这样做。我在网上所做的阅读表明您不应该在模型中构建 html。我可以在模型中生成所需数据的数组并将其返回,然后在控制器或视图中循环以生成 html,但不确定什么是正确的方法,并希望得到一些建议。

感谢您提供的任何帮助。


新问题 - 更新代码:

再次嗨....下面有厌倦的建议,但现在有不同的问题。

我的代码现在是:

模型:

不用于此测试。将返回类似于在控制器中创建的数组的数组。

控制器:

    $aStoryList = array( 
        array(
           'headline' => 'Headline 1', 
           'story' => 'Story 1' 
        ), 
        array(
           'headline' => 'Headline 2',
           'story' => 'Story 2'
        )
    );
    $this->view->aStoryList = $aStoryList;

看法:

echo $this->partialLoop('partials/storyList.phtml', $this->aStoryList);

故事列表.phtml:

echo "<br />" . $this->headline . $this->story;

我已经把部分放在了....

视图/部分/storyList.phtml

视图中使用的此位置和路径源自此 stackoverflow 问题的答案 -我在 Zend Framework 中的何处保存部分(视图),以便我的应用程序中的所有视图都可以访问?

当我运行它时,我收到以下错误

消息:在路径 (/home/sites/xxxxx.com/public_html/xxxxxxx/application/views/scripts/) 中找不到脚本“partials/storyList.phtml”

现在把我的头发拉出来!

4

1 回答 1

2

该模型应用于从数据源中提取数据,但不应生成任何 HTML 标记。保存视图的 HTML 生成。控制器将成为模型和视图之间的粘合剂;也就是说,控制器将完成获取数据并将其交给生成输出的视图的工作。

在您的特定情况下,PartialLoop View Helper对于在循环中创建标记应该很有用。

我建议使用以下伪代码,而不是您在上面发布的内容:

控制器:

$this->view->myList = MODEL->getListOfItems();  // return an array of data

模型:

function getListOfItems() {
    $results = array(); // array of data to return

    // query db

    // loop over result set
    foreach($result as $row) {
        $results[] = $row;
    }

    return $results;
}

看法:

<?php echo $this->partialLoop('myList.phtml', $this->myList);

myList.phtml 查看部分:

<tr>
    <td><a href="<?php echo $this->url(array('id' => $this->id))"><?php echo $this->username ?></a></td>
    <td><?php echo $this->firstName ?> <?php echo $this->lastName ?></td>
    <td><?php echo $this->email ?></td>
</tr>

总结一下:

  • 控制器查询数据模型
  • 模型返回结果数组
  • 控制器直接传数组查看
  • View 调用partialLoophelper 并从模型中传递数组
  • partialLoophelper 遍历所有结果,一次将它们传递给myList.phtml(注意变量范围如何成为局部视图的本地)。

我的示例假设模型返回的数组包含键id, username, firstName, lastName

希望对您有所帮助,如果您有任何问题,请随时发表评论。

于 2012-06-04T20:23:32.427 回答