0

我有一个关于显示函数内容的问题,这个函数显示了一个while循环。

这是我的模型中的一个函数:

function get_results($id)
{
    $stmt = "select * where ... "
    $stmt = $this->BEAR->Database->query($stmt);

    $result = '';

    while($row = mysqli_fetch_array($stmt))
    {
        $result .= '<div>';
        $result .= $row['name'];
        $result .= '</div>';
    }

    $this->BEAR->Template->setData('loop', $result, FALSE);
}

这是我的控制器:

    $BEAR->Webprofile->get_results(Template->getData('id'));

这是我的观点:

<?php echo $this->getData('loop');?>

这在我的视图中显示循环没有问题。但我希望在我的模型中没有任何 HTMl,是否有这样做(因为这会导致我的模型中出现大量 HTML)。也许我可以在模型中设置数据,然后在我的视图中获取数据。

我尝试在模型函数中单独设置 while 循环,如下所示:

 while($row = mysqli_fetch_array($stmt))
    {
       $this->BEAR->Template->setData('name', $row['name']);
       $this->BEAR->Template->setData('name', $row['age']);
    }

然后调用Controller中的函数并调用每个setData,但这仅显示第一个结果而不是完整的while循环内容。

因此,我希望在我的视图中(使用 HTML)显示我的 while 循环的所有内容,但希望我的函数只是获取和设置数据。这可以做到吗?任何想法或指导将不胜感激。

4

2 回答 2

0

你需要对你的 MVC 应用一些纪律。您的模型需要返回原始数据。它应该只返回对象或数据数组。关键是一致性。

您的视图需要包含所有代码以添加您的 html 格式。拥有一个简单地调用您编写的模型函数的视图,该函数会输出一个 div 或有序列表,这会使视图的整个概念变得毫无用处。你的视图应该提供所有的 HTML 代码。

由于您使用的是 PHP,因此您可以轻松地加入和退出 HTML。

从您的模型中的类似内容开始:

function get_results($id)
{
    $stmt = "select * where ... "
    $stmt = $this->BEAR->Database->query($stmt);

    $results = array();

    while($row = mysqli_fetch_array($stmt))
    {
        $results[] = $row['name'];       
    }
    return results; 
}

从那里,您应该能够确定您的控制器应该调用此函数,并将 $results 与特定视图文件一起传递到您的视图/模板中以进行渲染。

于 2013-01-23T21:11:42.347 回答
0
function get_results($id)
{
    $stmt = "select * where ... "
    $stmt = $this->BEAR->Database->query($stmt);

    $result = '';
    $result = mysqli_fetch_array($stmt);
    return $result;
}

然后在你的控制器中:

 $this->BEAR->Template->setData('loop', $model->get_results($id), FALSE);

然后在你的模板中

foreach($rows as $row){
     ....do something with each row
}

如何从模型中获取数据然后传递给模板的完整示例

class MyController {
    function controller_showResults(){
        $model = new Model();
        $results = $model->get_results($_GET['id']);
        $this->BEAR->Template->setData('loop', $results, FALSE);
    }
}

现在视图假设模板中 setData 的第一个参数是传递给视图的变量,并且该变量是 $results

<?php foreach($loop as $l): ?>
    <div><?php echo $l['name'] ?></div>
<?php endforeach; ?>
于 2013-01-23T21:13:39.547 回答