Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MVC视图循环_Php_Model View Controller_Separation Of Concerns - Fatal编程技术网

PHP 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();

我有一个“博客预览”的模板,它基本上只是一个缩略图、标题和所说博客的简短摘录,结构简洁,便于在列表中重复

正如上面所暗示的,我打算从我的模型中的DB中提取我站点上的前10个博客,将它们传输到控制器,控制器将为视图提供它们。在视图中,我需要循环浏览结果,并为每个博客填充一个新的“博客预览”

我目前的解决方案(我认为这可能会打破MVC的规则)是在视图模板中执行此操作:

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的观点。不要在控制器上执行该操作,只需将其传递到视图并在那里执行其余的操作。让控制器接收输入,通过模型对其进行预处理,然后为视图准备一切。这样,您仍然可以确保代码的可维护性

干得好,我喜欢。事实上,我就是这样做的,但是我忽略了说明正在传递的对象,因为我不确定这是否是犹太教的。谢谢你帮我省下另一个问题!