2010-01-13 120 views
2

我有一个“博客预览”的模板 - 基本上只是一个缩略图,标题和所述博客的简短摘录,其结构非常简洁,可以在列表中重复使用。PHP MVC视图循环

正如上面所暗示的那样,我打算从我的模型中的数据库中将我网站上的前10位博客转移到控制器,并将其作为视图提供给他们。在视图中,我需要循环浏览结果并为每个博客填充新的“博客预览”。

我目前的解决方案(我认为这可能会破坏MVC的规则)是这样做的视图模板:

foreach($this->blogs as $blog) { 
    $tpl = new Output_Html(); 
    $tpl->title = $blog['title']; 
    // ...assign other vars 

    $tpl->render(); 
} 

不知怎的,这感觉像什么的观点不应该被允许吗?但是,我还能如何循环访问主页面模板内的“预览”模板?

帮助?

回答

2

考虑到视图负责生成输出,你在这里做的事情看起来没问题:你在视图中没有做任何“计算/商业事情/类似的事情”。

我唯一的问题是,你在这里写了很多代码;我宁愿将$blog数组/对象传递给查看整个视图,然后让视图处理它 - 而不是将$blog的每个属性分配给视图。


即这样的事情似乎(只是一个想法 - 你来看看如何可以用您的视图类适合)更漂亮:

foreach($this->blogs as $blog) { 
    $tpl = new Output_Html(); 
    $tpl->blog = $blog; 
    $tpl->render(); 
} 

这意味着,如果你的blog对象不断变化,你只有一个视图来编辑(添加或删除东西),你不必修改每个调用该视图来添加/删除$blog的一个组件/属性。

+0

干得好,我喜欢那样。实际上 - 我是这么做的,但是我忽略了说明被传递的对象,因为我不确定这是否是犹太教。谢谢你救了我另一个问题! – johnnietheblack 2010-01-13 23:24:58

+0

不客气:-)玩得开心! – 2010-01-13 23:28:02

1

控制器的责任是处理输入并将模型设置为特定状态。您的视图的责任是渲染模型。所以,我会说,这是可以做的。这就像渲染部分视图或使用ViewHelper。 View Helper封装动态业务数据的表示逻辑。

0

我同意帕斯卡。不要在你的控制器上执行该操作,只需将它传递给视图,然后在其中执行其余的操作。让控制器接受输入,通过模型对其进行预处理,然后为视图准备一切。这样,您仍然可以确保代码的可维护性。