从功能循环时的Php显示

时间:2013-01-23 20:52:22

标签: php mysql

我有一个关于显示函数内容的问题,这个函数显示了一个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($row = mysqli_fetch_array($stmt))
    {
       $this->BEAR->Template->setData('name', $row['name']);
       $this->BEAR->Template->setData('name', $row['age']);
    }

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

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

2 个答案:

答案 0 :(得分: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与特定视图文件一起传递到您的视图/模板中以进行渲染。

答案 1 :(得分: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; ?>