JSON 和 XML 视图
在应用程序中启用 RequestHandlerComponent
的同时启用对 xml
和/或 json
扩展名的支持, 你就可以自动利用新的视图了。在本节的其余部分,数据视图即指XmlView
和 JsonView
。
有两个方法来生成数据视图。第一种办法是使用 _serialize
键,而第二种办法是创建正常的视图文件。
在使用数据视图类之前,需要进行一些设置:
- 用
Router::parseExtensions()
方法启用 json 和/或 xml 扩展名。这让路由可以处理多种扩展名。
2.3 新版功能: 增加了 RequestHandlerComponent::viewClassMap()
方法,用于映射类型到视图类。以前版本的 viewClassMap 设置将不起作用。
在添加 Router::parseExtensions('json');
到你的路由文件后, 当请求使用.json
扩展名、或者 Accept 头是 application/json
时,CakePHP 将会自动切换视图类。
如果你需要在生成响应之前对视图变量进行任何格式化或者操作,你就应该创建视图文件。_serialize
的值可以是字符串或者一个需要进行序列化的视图变量的数组:
你也可以定义 _serialize
为合并多个视图变量的数组:
定义 _serialize
为数组有额外的好处,即,在使用 时自动添加一个顶层的 <response>
元素。如果你设置 为字符串,又使用XmlView,确保你的视图变量有一个单独的顶层元素。如果没有,Xml 就无法生成。
如果你在创建最终的输出之前想要对你的视图内容进行操作的话,你就应当使用视图文件。例如,如果我们有一些文章(posts),其中一个字段含有生成的 HTML,我们可能想在JSON 响应中略去该字段。这种情况下就需要用到视图文件了:
你可以做更复杂的操作,也可以使用助件(helper)来格式化数据。
数据视图类不支持布局。他们假定视图文件会输出序列化的内容。
缺省情况下,当使用 _serialize
时,XmlView 将会用一个 <response>
节点将你的序列化的视图变量包起来。你可以用 _rootNode
视图变量来定制个这个节点的名称。
2.3 新版功能: 新增_rootNode
功能。
- 用来生成 Json 视图数据的视图类。上文描述了如何在应用程序中使用 JsonView。
2.4 新版功能.
当使用 JsonView 时,你可以使用一个特殊的视图变量 jsonp
来返回 JSONP 响应。设置它为 true
使得视图类会检查是否设置了查询字符串(_query string)参数,如果是,就把 json 响应包裹在一个给定名称的函数内。如果你想要使用定制的查询字符串参数,而不是 "callback",就设置 _jsonp
为需要的名称而不是 true
。