视图系统是yangzie的一大特色,yangzie的基本原则之一就是:输入 – 处理 – 输出;其中的输出在yangzie中叫“响应”(Response),响应可能是一个视图也可能是个HTTP状态,也就是所有返回到请求端的内容都是响应。
视图系统是响应的一个重要组成部分,大部分的“输出”都是视图(View),由于yangzie是一个负责开发web后端的开发框架,这里不得不提一下web中使用的协议:HTTP。http协议分成两个部分:消息头和消息体。消息头是用于控制请求和响应应该被如何控制的的协议控制信息,消息体是就是实际被输出的内容,在yangzie里,称为视图。这里的输出包含以下这些情况。
- html内容,比如一个完整的页面、部分页面的html片段
- json数据
- 一张图,如png,jpg
- xml内容,如xml数据,svg
- pdf、xls,cvs
- 可以下载的内容格式,如zip
- 其他你想通过请求返回的内容
也就是说,根据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的视图系统还包含:
- Layout,定义一个请求的整体显示布局,比如定义菜单区域,页头、页脚区域
- Master View,可以把大家都一样的内容提取出来,做成master view,然后让每个控制器只负责自己的内容区域即可。
- Section View。把layout或者master view中的部分内容交改具体的控制器来定义
- 基于HTTP的缓存功能,没错,动态响应的view也是可以被缓存的
- 组件系统,可以把重复的或者相识的页面做成一个组件重用
那么,我们开始进入视图的世界,首先我们需要回顾一下视图和controler的关系.
1.控制器与视图
一个网络请求都会唯一映射到一个Controller的Action,请求是输入,Controller是处理,那么在yangzie中每一个Action都对应一个View