Php 每页一个视图对象?还是仅一个视图对象加载不同的模板?

Php 每页一个视图对象?还是仅一个视图对象加载不同的模板?,php,templates,model-view-controller,view,Php,Templates,Model View Controller,View,在我的应用程序中,我有一个视图对象,它可以加载($template)一个模板,以便使用render()方法对其进行渲染 在我读到的所有关于视图的文章中有时我看到人们按照我目前的方式做,有时我看到人们做如下事情 class ProductView extends View { } class CheckoutView extends View { } 每页都有一个单独的视图 两种方法的优点/缺点是什么 任何建议都将不胜感激。每页一次浏览绝对是最适合网络的。请注意,我不是指每个控制器一个视图

在我的应用程序中,我有一个
视图
对象,它可以
加载($template)
一个模板,以便使用
render()
方法对其进行渲染

在我读到的所有关于
视图的文章中
有时我看到人们按照我目前的方式做,有时我看到人们做如下事情

class ProductView extends View {

}

class CheckoutView extends View {

}
每页都有一个单独的
视图

两种方法的优点/缺点是什么


任何建议都将不胜感激。

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

例如,在
BlogPostView
中,您将拥有:

$this->load('header');
$this->load('post', $data);
$this->load('footer');
然后使用以下命令渲染它:

$this->render();
它没有“唯一真正的解决办法”。 但对我来说,观点必须尽可能简单。类似printf函数。是否要扩展printf行为?我想不

视图不应为“加载模板”。如果您有类似于
$this->load('header')的代码在视图中,则它违反了。视图(有时)使用模板为用户创建响应,但不应创建它们

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

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

在更为复杂的情况下,您可能需要研究的概念。这种方法允许您将表示逻辑分成更小的块。这也使得构建代码变得更加容易,如果您是用户的话


底线是:如果整个应用程序只有一个视图,那么您就错了。

谢谢您的回复。您认为拥有独立的
视图的最大优势是什么?我最近遇到了
查看帮助者
,如果我每页都有一个单独的
视图
,那么我想,为每个
视图
分配特定的
帮助者会更容易,对吗?@David,这真的取决于你对MVC模式的看法。模式不是标准,你可以遵循它们,调整它们,或者不遵循它们。这取决于您认为当前应用程序设计中最适合您的内容。MVC模式只是告诉您如何划分数据、逻辑和表示,以及应该通过这些元素运行什么关系。你设计的模型,视图或控制器只是你的电话。谢谢你的回复。您将如何仅为
视图
对象提供
查看帮助程序
?在
视图中有
ViewHelperFactory
可能吗?这取决于起点。我既不需要助手也不需要助手工厂。因为我的愿望清单(查看类)很短。不要要求演示做很多事情。在现实世界中,分配责任很重要。视图最多用于前端。这就是为什么模板更自然的方式,在我看来。前端家伙可以在PHP中为0。谢谢你的回复。从现在起,我将开始使用多个视图。我将开始使用
ViewHelpers
,例如,在我的新
产品
视图中,如果该视图需要
ViewHelper
,它是否应该具有类似
private$productHelper
的属性?老实说,我甚至看不到使用视图帮助程序的原因。我将使用ViewModel实例来包含任何在视图本身中没有位置的逻辑。