PHP MVC视图循环
我有一个“博客预览”的模板,它基本上只是一个缩略图、标题和所说博客的简短摘录,结构简洁,便于在列表中重复 正如上面所暗示的,我打算从我的模型中的DB中提取我站点上的前10个博客,将它们传输到控制器,控制器将为视图提供它们。在视图中,我需要循环浏览结果,并为每个博客填充一个新的“博客预览” 我目前的解决方案(我认为这可能会打破MVC的规则)是在视图模板中执行此操作:PHP MVC视图循环,php,model-view-controller,separation-of-concerns,Php,Model View Controller,Separation Of Concerns,我有一个“博客预览”的模板,它基本上只是一个缩略图、标题和所说博客的简短摘录,结构简洁,便于在列表中重复 正如上面所暗示的,我打算从我的模型中的DB中提取我站点上的前10个博客,将它们传输到控制器,控制器将为视图提供它们。在视图中,我需要循环浏览结果,并为每个博客填充一个新的“博客预览” 我目前的解决方案(我认为这可能会打破MVC的规则)是在视图模板中执行此操作: foreach($this->blogs as $blog) { $tpl = new Output_Html();
foreach($this->blogs as $blog) {
$tpl = new Output_Html();
$tpl->title = $blog['title'];
// ...assign other vars
$tpl->render();
}
不知何故,这感觉像是不应该允许视图做的事情?但是,我怎样才能在主页模板中循环浏览“预览”模板呢
帮助?控制器的职责是处理输入并将模型设置为特定状态。视图的职责是渲染模型。所以,我想说,这是可以做的。这类似于渲染局部视图或使用ViewHelper。视图帮助器封装了动态业务数据的表示逻辑。考虑到视图负责生成输出,您在这里所做的似乎还可以:您没有在视图中执行任何“计算/业务操作/类似操作” 我唯一的问题是你在这里写了很多代码;我希望将
$blog
数组/对象作为一个整体传递给视图,并让视图处理它——而不是将$blog
的每个属性分配给视图
i、 e.这样的东西看起来(只是一个想法——由您来决定它如何适合您的视图类)更漂亮:
foreach($this->blogs as $blog) {
$tpl = new Output_Html();
$tpl->blog = $blog;
$tpl->render();
}
这意味着,如果您的
blog
对象发生更改,您只有一个视图可编辑(添加或删除内容),并且您不必修改对该视图的每个调用来添加/删除$blog
的一个组件/属性。我同意Pascal的观点。不要在控制器上执行该操作,只需将其传递到视图并在那里执行其余的操作。让控制器接收输入,通过模型对其进行预处理,然后为视图准备一切。这样,您仍然可以确保代码的可维护性 干得好,我喜欢。事实上,我就是这样做的,但是我忽略了说明正在传递的对象,因为我不确定这是否是犹太教的。谢谢你帮我省下另一个问题!