视图中的 PHP MVC 循环

Posted

技术标签:

【中文标题】视图中的 PHP MVC 循环【英文标题】:PHP MVC loop in the view 【发布时间】:2012-03-19 19:22:23 【问题描述】:

我认为自己是一个 php 初学者,所以这个问题可能对某人来说太容易了,但我对如何解决它感到非常困惑。我试图在我的视图中从数据库中循环一些东西。所以,我很快就这样解决了:

我在我的模型中创建了一个执行循环的函数,同时创建了 html 并将其保存在一个变量中。然后,我从控制器中获取该变量并将其传递到我的视图中。但是,这似乎不是解决问题的好方法,因为如果我想更改我的 html,我需要输入我的模型函数而不是一些视图文件。

然后,我在我的模型中创建了另一个函数,如下所示:

function displayUsers() 
$sql = $this->pdo->prepare('select * from user');
$sql->execute();
while($row = $sql->fetch())
    $results[] = $row;
return $results;

现在...我在控制器中获取结果,并将其发送到视图中,但是...我不知道如何从变量中提取结果。我做过这样的事情:

while($output) 
    foreach($output[$i] as $key => $value)
        $data[$key] = $value;
    echo $data['email'];
    $i++;

但是,最后它告诉我未定义的偏移量,这意味着我指的是一个不存在的数组键。谁能帮我解决这个问题?

【问题讨论】:

您是否尝试过调试?尝试var_dump()ing $output 变量中的内容。 【参考方案1】:

正确的 MVC 在模型或控制器中不应有任何输出。

理想情况下,您应该有一个模型,它只获取原始数据并将其返回到控制器中。然后控制器可以建立一个我们称之为数据的值数组。例如:

控制器

$data['users'] = $this->MyModel->getusers(); // Getting the users from your model
$data['posts'] = $this->MyModel->getposts(); // Getting the posts from your model
$this->getTemplate('userdisplay', $data); // Get the template userdisplay and pass data

这会从模型中获取数据,然后将其分配给“数据”变量中的键。然后,您可以将数据变量传递到模板中。然后,您将在模板中使用两个变量,$users 和 $posts。

您需要一个“getTemplate”函数将数据数组正确映射到单个变量以在模板中使用,但所有显示都应位于模板中。

要最后回答您的具体问题,模板中应该可以使用以下内容:

if (count($users) > 0) 
    foreach ($users as $person) 
        echo $person['email']; 
    

【讨论】:

没错,这就是我寻找另一个解决方案的原因,因为第一个解决方案没有遵循 MVC 规则。谢谢你的回答,这是我想做的。这对我帮助很大。 实际上您可以将MyModel 实例直接传递给视图。然后视图从模型中获取数据。否则你所拥有的实际上是接近 MVP。另外..您不需要检查count()。那有点没有意义。无论如何,+1 的努力。【参考方案2】:

你应该可以这样做:

foreach($output as $row) 
   echo $row['email'];

【讨论】:

没错,它现在正在工作......我想我没有足够的知识,所以我没有想到这一点。非常感谢!

以上是关于视图中的 PHP MVC 循环的主要内容,如果未能解决你的问题,请参考以下文章

ASP MVC 2 问题 - 尝试在视图中的 for 循环中显示图像

MVC 将数据传递给视图和循环

带有for循环的MVC视图仅返回最后一项

MVC5 视图:在模型中循环时设置并获取索引

PHP10秒学会优化视图渲染中的foreach循环语句!

PHP10秒学会优化视图渲染中的foreach循环语句!