每页一个View对象?或只是一个View对象加载不同的模板?

时间:2013-03-31 10:22:56

标签: php templates model-view-controller view

在我的应用程序中,我有一个View对象可以load($template)一个模板,可以使用render()方法进行渲染。

在我阅读过有关Views的所有内容中,有时我会看到人们按照我目前的方式进行操作,有时候我会看到人们在做类似以下的事情

class ProductView extends View {

}

class CheckoutView extends View {

}

每页单独View

两种方式的优点/缺点是什么?

任何建议都会非常感谢。

3 个答案:

答案 0 :(得分:1)

  

视图不应该是“加载模板”。如果您在视图中包含$this->load('header');之类的代码,则会违反SRP。查看(有时)使用模板为用户创建响应,但不应创建响应。

在大多数关于视图的文章中,您将了解Rails(及其克隆)对视图的解释。在RoR中,您没有视图。只有一个美化的哑模板。

表示层的结构使您最好在控制器和视图之间建立1:1的关系。每个视图负责处理由用户输入触发的响应。因此:您的页面通常每个执行时间有一个一个视图

在更复杂的情况下,您可能希望研究composite view的概念。此方法允许您以较小的块分隔表示逻辑。如果您使用ViewModel

,这也可以让您更轻松地构建代码

最重要的是:如果每个应用程序都有一个视图,那么你做错了。

答案 1 :(得分:0)

每页一页视频绝对最适合网络。注意我并不是指一个每个控制器的视图,而是每个不同的页面。您希望具有可由不同视图(例如页眉,页脚或导航栏)调用的不同模板。

例如,在BlogPostView内你可以:

$this->load('header');
$this->load('post', $data);
$this->load('footer');

然后用:

渲染它
$this->render();

答案 2 :(得分:0)

它没有“唯一真正的解决方案”。 但就我而言,View必须尽可能简单。喜欢printf功能。你想扩展printf行为吗?我想不是!