Json使用JavaScript对象语法,能够以简单的语法格式对JavaScript对象进行表示。ajaxReturn默认情况下就是返回Json格式数据,能够方便地与前台Ajax实现高效互动,如以下代码所示。Jsonp请求数据时,会在url追加cakebale回调函数,Json数据必须回应该函数,才能绕过浏览器的安全策略,实现跨域通信。在Ajax异步请求时只需要为callback传入回调标识名称,即可实现Jsonp通信。......
2023-11-04
DOM可以创建并生成静态的XML文件,但在实际应用开发中通常使用动态生成。动态生成可以实时地从数据库中获取数据,并以标准的XML格式输出,第三方应用(如PHP应用、手机终端应用)调用动态生成的XML文件能够实现远程与本地的高效互动。ThinkPHP内置了许多生成XML数据的类库,常用的有Action控制器类中的ajaxReturn方法、display方法以及xml_encode扩展函数。下面分别介绍。
1.ajaxReturn方法
ajaxReturn方法是Action控制器基类中用于返回数据的方法,该方法可以返回Json、EVAL序列化数据以及通用的XML标记数据。ajaxReturn通常结合Ajax异步请求来使用,但也可以用于设计开放API(网站接口)。
ajaxReturn生成XML是非常简单的,开发人员不需要定义文档节点,甚至不需要了解XML文档结构,因为ajaxReturn使用关联数组生成XML文档模型。也就是说普通数组中的键名(key)对应XML文档中的节点名称;键值(value)对应节点文本。假设PHP数组代码如下所示。
使用ajaxReturn转换后,将得到标准的XML格式数据,如以下代码所示。
ajaxReturn方法返回结果受DEFAULT_AJAX_RETURN配置项影响,默认值为json,可选的值有json、eval及xml。当然也可以指定ajaxReturn方法第4个参数值为xml,强制输出xml数据。ajaxRetun方法共支持4个参数,表现形式为ajaxReturn($data,$info,$status,$type)。改变参数值将直接影响输出结果,如表9-1所示。
表9-1 ajaxReturn方法参数
Model类中的select或find方法返回的数组原本就是关联数组数据,所以ajaxReturn能够很好地将结果转换为XML文档,如以下代码所示。
ajaxReturn最终会将数据表字段转换为XML子节点名称,字段值将转换为节点文本,如图9-1所示。
图9-1 ajaxReturn生成XML结果
需要注意的是ajaxReturn生成的XML标签名称是受自定义模型字段映射($_map)影响的(可参考本书第7章7.1节)。
2.display方法
display方法是控制器与视图引擎进行交互的入口,系统内置的视图引擎默认将模板渲染为HTML,通过display方法第3个参数可以改变渲染方式。display方法共支持3个参数,表现形式为display($templateFile,$charset,$contentType),参数值的设定如表9-2所示。
表9-2 dsplay方法参数
对于XML数据而言,只需要更改contentType参数值即可,但该参数值只能对当前的输出产生作用,如果需要应用到整个项目,开发人员还可以通过修改TMPL_CONTENT_TYPE配置项值为xml,使得项目下的所有display输出变为XML。(www.chuimin.cn)
需要说明的是,虽然通过修改配置项contentType可实现XML输出,但模板文件还必须使用HTML来描述,如以下代码所示。
如上述代码所示,index_xml的真实文件名为index_xml.html,所以开发人员需要在tpl/Index/目录下创建该文件,代码如下所示。
可以看到,使用display输出XML与默认的HTML并没有区别,模板引擎中的所有标签、语法、变量等都可以使用。这就给XML开发带来非常灵活的特性,例如可以方便遍历数据、设置自定义标签、自定义属性等。最终的运行效果如图9-2所示。
图9-2 display输出xml
需要注意的是,由于XML对标记的处理比HTML要严格,所以在使用display输出XML时,不能有其他的非XML数据被输出(例如在动作或模板中输出调试信息、性能信息或者开启LAYOUT_ON布局选项等),否则由于标记溢出,导致浏览器解释异常。
3.xml_encode函数
xml_encode函数用于快速生成XML数据,功能上类似于ajaxReturn,这两者所生成的XML标签名称和标签文本都是根据关联数据键名与键值而来的。不同之处在于xml_encode可以在MVC所有功能类库中进行使用,包括自定义扩展、自定义函数、自定义模型等。而ajaxReturn只能在控制器动作中进行使用。
另外,xml_encode虽然不能自定XML文档标签,但允许自定义根节点。xml_encode函数支持3个参数,表现形式为xml_encode($data,$encoding,$root),参数值如表9-3所示。
表9-3 xml_encode函数参数
xml_encode函数的使用非常简单,和普通的自定义函数没什么区别,如以下代码所示。
事实上,ajaxReturn方法本质上也是调用xml_encode函数的,所以在实际应用开发中如果只需单一地生成xml数据,完全可以使用xml_encode代替ajaxReturn方法。
通过前面内容的介绍,可以看到使用display方法处理xml是最灵活和强大的,如果配合后面章节将介绍的静态缓存功能,可以将结果进行缓存,以提高数据响应速度。
display是控制器基类show的数据交互方法,show方法直接调用模板引擎中的view(封装在action类中)接口,根据面向对象原则,开发人员可以直接调用show方法进行处理数据(需要使用连贯操作,即$this->view->show())。
通过这前面内容的学习,相应读者能够使用PHP轻松地生成XML文件,以及使用内置的XML引擎解释XML数据了。XML只是一种数据规范,接下来将学习另外一种非常流行的数据规范。
有关PHP MVC开发实战的文章
Json使用JavaScript对象语法,能够以简单的语法格式对JavaScript对象进行表示。ajaxReturn默认情况下就是返回Json格式数据,能够方便地与前台Ajax实现高效互动,如以下代码所示。Jsonp请求数据时,会在url追加cakebale回调函数,Json数据必须回应该函数,才能绕过浏览器的安全策略,实现跨域通信。在Ajax异步请求时只需要为callback传入回调标识名称,即可实现Jsonp通信。......
2023-11-04
上述XML代码共有两条新闻数据,通过浏览器直接访问将能够正确识别。由于DOM首先将XML载入内存,这就意味着在引擎还没最终输出结果前,开发人员可以对内存中的数据进行增、删、改,这也是DOM最为强大的功能。DOM查询XML前面使用ASX引擎能够方便地对XML数据进行查询,接下来将使用DOM进行同样的查询操作,帮助读者加深对DOM与SAX的认识。......
2023-11-04
PHP 5后的版本借鉴了大量Java思想,得益于早期PHP面向过程编程支持,PHP在实现MVC设计中变得较灵活、易用。但是随着PHP 5.x的到来,各种MVC框架的出现,尤其Zend推出的Zend Framework,彻底地改变了PHP状况,使得PHP也能够实现优雅的Web编程。MVC设计模式将使代码将变得简洁。但是在MVC设计模式中,Index称为动作。当然,MVC只是一种设计模式,在开源的PHP编程世界中,已经拥有众多的MVC编程框架。......
2023-11-04
在数据库开发中,查询和插入数据是同等重要的,ThinkPHP对数据的插入、更新等都做了高度封装,系统提供create方法,用于创建数据对象。图7-2 create创建数据流程2.create数据操作前面介绍了create方法的运行过程,读者只需要理解即可,在实际应用开发中创建数据的过程是极其简单的。下面将结合示例代码,介绍create方法的实际应用,加深对create方法的认识。一切完成后,此时数据对象存放于内存中,使用add方法进行提交,完成整个create创建数据的过程。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。......
2023-11-04
Eclipse是IBM的一个商业项目,2001年11月起IBM将Eclipse贡献给开源社区,从此奠定了Eclipse的地位。Eclipse通过PDT插件来提供PHP开发支持,Eclipse PDT能够让编写PHP变得简单和高效,下面将介绍Eclipse PDT的安装和使用。Eclipse PDT的安装有两种方式,一种是直接通过Eclipse的扩展进行安装;另一种是下载带PDT插件的Eclipse。下面将以Eclipse3.5.2作为基础,讲解Eclipse PDT插件的安装过程。如果下载带PDT插件的Eclipse,只需要双击Eclipse启动程序即可,此时Eclipse就提供了完美的PHP编程支持。......
2023-11-04
图12-2 SOAP服务如果服务没有开启,需要在PHP配置文件中开启,如以下代码所示。其中参数1表示SOA服务描述文件,即WSDL文件,该文件是SOAP通信的核心;参数2表示SOAP协议版本,常用的版本有1.0及1.2,本章内容及示例全部基于SOAP 1.2版本实现。使用普通的Firebug等插件不能获取到异常信息,而断点调试是PHP的弱项,所以调试问题将会是SOAP开发首要面对的问题。......
2023-11-04
相关推荐