我有一个关于显示函数内容的问题,这个函数显示了一个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),但希望我的功能只是获取和设置数据。可以这样做吗?任何想法或指导都将不胜感激。
答案 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; ?>