视图系统

目录
[隐藏]

视图系统是yangzie的一大特色,yangzie的基本原则之一就是:输入 – 处理 – 输出;其中的输出在yangzie中叫“响应”(Response),响应可能是一个视图也可能是个HTTP状态,也就是所有返回到请求端的内容都是响应。

类图

视图系统是响应的一个重要组成部分,大部分的“输出”都是视图(View),由于yangzie是一个负责开发web后端的开发框架,这里不得不提一下web中使用的协议:HTTP。http协议分成两个部分:消息头消息体。消息头是用于控制请求和响应应该被如何控制的的协议控制信息,消息体是就是实际被输出的内容,在yangzie里,称为视图。这里的输出包含以下这些情况。

  1. html内容,比如一个完整的页面、部分页面的html片段
  2. json数据
  3. 一张图,如png,jpg
  4. xml内容,如xml数据,svg
  5. pdf、xls,cvs
  6. 可以下载的内容格式,如zip
  7. 其他你想通过请求返回的内容

也就是说,根据yangzie的输入 – 处理 – 输出原则和重用原则,任何一个输入 – 处理都可以输出成任何一种视图格式,在yangzie中需要做的只是在请求中指定一下响应格式。举个例子:

一个查看订单的请求地址是http://YOUR-DOMAIN/order/123456
那么默认情况下该请求返回的是一个web的查看html页面。

但如果我们需要把这个订单打印成PDF或者导出excel,那么在yangzie中你需要做的就是指定响应格式,也就是,指定一个后缀。就这么简单:
返回PDF http://YOUR-DOMAIN/order/123456.pdf
返回excel http://YOUR-DOMAIN/order/123456.xls

本文档将解释如何做到这点。当然yangzie的视图系统不止这么简单,yangzie的视图系统还包含:

  1. Layout,定义一个请求的整体显示布局,比如定义菜单区域,页头、页脚区域
  2. Master View,可以把大家都一样的内容提取出来,做成master view,然后让每个控制器只负责自己的内容区域即可。
  3. Section View。把layout或者master view中的部分内容交改具体的控制器来定义
  4. 基于HTTP的缓存功能,没错,动态响应的view也是可以被缓存的
  5. 组件系统,可以把重复的或者相识的页面做成一个组件重用

那么,我们开始进入视图的世界,首先我们需要回顾一下视图和controler的关系.

1.控制器与视图

一个网络请求都会唯一映射到一个Controller的Action,请求是输入,Controller是处理,那么在yangzie中每一个Action都对应一个View