视图中的 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 循环的主要内容,如果未能解决你的问题,请参考以下文章