PHP - 如何拆分MVC - 查看(使用非逻辑模板引擎)逻辑类和原始html模板?

时间:2012-09-04 10:12:52

标签: php model-view-controller frameworks templating

我确信模板不应包含任何逻辑{}并包含和阻止所有部分。在MVC框架中,V通常是与HTML混合的原始php,这对于用于清理HTML和设计师噩梦的人来说非常糟糕。但是将视图逻辑放在控制器中也是一种错误的方法。

我想知道怎么做到这一点。 请求 - >控制器 - > load model ... logic将所有内容发送到 - >查看 - >查看逻辑块... - >模板

这在Laravel或Fuelphhp这样的框架中是否可行?或者更普遍的是,这甚至是一种很好的做法?

3 个答案:

答案 0 :(得分:3)

View是MVC的一部分,它负责表示逻辑。正确编写的视图将从模型层获取信息,并根据此信息确定用户应获得的响应。

如果视图的任务是创建HTML响应,它将使用多个templates的组合来创建它。或者它可能只是将HTTP标头发送回浏览器。

在另一种情况下,视图可能只是为REST API生成JSON或为SOAP生成XML。

但在所有这些情况下,视图决定如何表示信息。 Controller仅负责更改模型层和当前视图的状态。

P.S。

MVC本身是一种设计模式,它由两层组成:表示层和模型层。模型层处理所有域业务逻辑,而表示 - 使用用户界面和交互。

没有"控制器层"或者"查看图层"。

有一个简单的原因,为什么大多数Rails克隆都坚持认为视图是一个模板,并将ORM称为" model"。这些框架是为快速原型设计(生成一次性代码)和不可维护性而创建的。

答案 1 :(得分:2)

非常普遍:许多PHP框架实现“View”的效果不是很好。没有什么说视图需要一个模板文件,或者它根本不需要是模板。视图是可视化模型数据的代码段。这可能是必要的复杂或简单。它可以是返回JSON,二进制数据或其他任何内容的类。它根本不需要涉及HTML。

如果确实涉及HTML,则没有任何内容表明控制器需要基本设置所有变量,然后include HTML模板。那太少了。视图应该是一个独立的代码片段,可能是一个类,它可以执行任何为可视化某个数据或对象而需要做的事情。视图可以包含多个类。在从磁盘加载任何HTML模板之前,视图中可以有一整层逻辑。在您的应用中做最有意义的事情。

答案 2 :(得分:0)

我同意你上面的所有观点......

逻辑不属于视图... 除非,否则视图逻辑与该特定视图直接相关。允许一些基本逻辑可以防止类爆炸,您尝试围绕自己的规则来解决视图应该是什么。底线规则是视图应该在请求结束时发生,并且只读取/查询模型。通过将逻辑移入类中避免重复。

视图逻辑不属于控制器...主要是因为它很容易纠结,控制器对模型进行更改然后调用视图过程。

通常,您应该根据处理传入输入并修改模型的控制器层和渲染模型的视图层来组织您的工作。

大多数框架和原始PHP都可以用来遵守这种道德规范。