首页 理论教育PHPMVC开发实战:扩展分类

PHPMVC开发实战:扩展分类

【摘要】:系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。表11-1 CURD操作接口如表11-1所示,参数$data表示传入或返回的数据信息;参数$options表示返回当前操作的模型名称及表前缀。

前面介绍过系统共支持8大类扩展,这些扩展是系统原生支持的,但扩展类库文件并非系统内置,需要开发人员手动下载,读者可以在http://www.thinkphp.cn/extend/找到相关信息及扩展文件。下面分别介绍。

1.模式扩展

传统意义上,一般使用MVC进行开发就是指网站开发,所谓的网站开发需要由视图、控制器、模型组成。但是随着互联网的发展,很多情况下网站只是其中的一个单元,共同构造运营平台的还有客户端、开放API、CRM(客户管理系统)、OA(办公自动化系统)等。如何将这些单元或设备整合到一起,是网站开发人员需要面对的问题。ThinkPHP的模式扩展很多情况下就适用于开发这些模块,以简化开发难度,提高运行速度。系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。

(1)简洁模式

系统在初始化时,默认使用标准模式运行。标准模式最典型的模块有视图、数据库ORM等。简洁模式就是将标准模式进行了简化,使得项目改变运行模式,处于简洁模式的项目具有以下特性。

➢不支持模块(控制器)分组。

➢不载入视图引擎(但可以手动调用)。

➢不支持数据模型(数据映射、CURD、字段处理等),只能使用原生SQL操作数据库。

➢只载入MySQL数据库驱动。

➢不载入多语言处理模块。

➢不支持Dispatch路由

➢不能使用系统内置扩展,但可以使用自定义扩展。

简洁模式通过减少模块的载入,从而使框架更加轻量级。由于没有视图引擎,所以简洁模式非常适合开发类似于Ajax后台、JavaScript输出等简单的应用。定义简洁模式,只需要在项目入口文件定义MODE_NAME常量值为Thin即可,如以下代码所示。

978-7-111-42852-7-Part02-561.jpg

(2)精简模式

精简模式是一种比简洁模式提供更多功能的应用开发模式。精简模式非常适合开发小型的留言板、向导系统等。精简模式的MODE_NAME常量值为Lite,如以下代码所示。

978-7-111-42852-7-Part02-562.jpg

与简洁模式相比,精简模式在简洁模式的基础上增加了如下几项特性。

➢载入系统默认的视图引擎。

➢支持Dispatch路径功能。

➢支持连贯操作,统计查询。

➢支持没有回调结果的CURD操作。

(3)命令模式

在Linux Shell编程中,通常使用Java、C、C++、Perl编写命令脚本。PHP作为一种Web动态脚本,通常用于网站编程,但Zend引擎引入了命令行模式,允许开发人员直接将PHP编译为Shell脚本,在Linux系统下只要安装了PHP解释器,就能够像其他编程语言一样,使用PHP作为Shell脚本。

命令行模式就是运行在Shell(即Linux终端命令)编程模式下的,开发人员只需要在Shell脚本中以传参的方式给MVC动作传递命令,PHP脚本即会执行相关操作(例如操作数据库、IO操作等)。命令行模式的MODE_NAME常量值为cli,如以下代码所示。

978-7-111-42852-7-Part02-563.jpg

命令行模式非常适合于Shell编程,例如计划任务、消息队列等均需要在命令行下运行的任务。在传参时需要使用Linux标准的命令参数。例如/usr/local/bin/php index action id 4表示请求index模块action方法,并传递参数id,参数值为4。

(4)AMF模式

ZendAMF是一款由Zend公司开发并定义的数据传输协议,用于满足flex、flash编程时与PHP进行大数据交互的需要。数据交互常用的技术有HTTPService、WebService和RemoteObject。这些技术都是基于RCP(远程过程调用协议)的。HTTPService和WebService使用XML数据格式,RemoteObject使用ZendAMF数据格式。

ZendAMF数据是基于数据流的,在传输时需要序列化与反序列化,所以无论性能还是传输量,ZendAMF都比XML更有优势。使用AMF模式将让应用更加适合ZendAMF编程,实现与flex高效互动。在ThinkPHP中,要修改项目为AMF模式,只需要在入口文件中修改MODE_NAME值为amf即可。如以下代码所示。

978-7-111-42852-7-Part02-564.jpg

将运行模式改为amf后,还需要在配置文件中定义允许被RemoteObject调用的控制器,如以下代码所示。

978-7-111-42852-7-Part02-565.jpg(www.chuimin.cn)

关于RemoteObject的使用,读者可以参考相关的flex开发资料,在此不做深入介绍。

(5)RPC模式

RPC通信是一种应用非常广泛的数据交换技术,例如HTTPService、WebService(SOAP)、WCF等都是基于RPC来通信的。RPC能够支持多种数据格式,例如XML、WSDL、Json、ZendAMF等。可以说RPC是客户端与服务端最通用、也是最可靠的一种通信协议。在ThinkPHP中,定义RPC通信模块与Amf类似。首先在配置文件中修改MODE_NAME常量值为phprpc,如以下代码所示。

978-7-111-42852-7-Part02-566.jpg

然后在项目配置文件中定义公开可调用的控制器即可,如以下代码所示。

978-7-111-42852-7-Part02-567.jpg

将项目改变phprpc模式,可以让项目专注于处理rpm调用,而不需要处理Web实现,例如WebService处理等,非常适合开发网站API。

2.控制器扩展

一个控制器就是一个文件类,例如UserClass。开发人员可以通过控制器扩展,实现为控制器添加附加功能,例如客户端判读、权限检验等。控制器扩展需要使用_initialize方法接口实现,如以下代码所示。

978-7-111-42852-7-Part02-568.jpg

3.模型扩展

模型提供了对数据表直接操作的作用,通过模型扩展,可以增强模型的功能。系统本身内置了多种扩展模型,如AdvModel(高级模型)、RelationModel等。与控制器一样,模型的扩展接口也是_initialize方法,开发人员可以使用_initialize方法实现模型接口的初始化,调用基础类库或者函数等。扩展模型允许使用模型内置的增强方法,如_before_insert、_after_insert等,从而实现更高级的CURD操作。可扩展的模型增强方法如表11-1所示。

表11-1 CURD操作接口

978-7-111-42852-7-Part02-569.jpg

如表11-1所示,参数$data表示传入或返回的数据信息(数组类型);参数$options表示返回当前操作的模型名称及表前缀(数组类型)。其中更新前操作及更新后操作还可以使用_facade($data)代替。CURD扩展接口的使用如以下代码所示。

978-7-111-42852-7-Part02-570.jpg

4.行为扩展

行为相当于请求管理器,行为可以根据URL动作请求,在执行动作前执行的一系列系统扩展功能。例如URL路由检测、模板定位、令牌生成等。系统共内置了8大行为,如下所示。

➢checkRoute:检测URL路由。

➢LocationTemplate:定位模板文件路径。

➢ParseTemplate:调用模板解释引擎。

➢ShowPageTrace:显示页面Trace信息。

➢ShowRuntime:显示系统运行时间。

➢TokenBuild:初始化表单令牌。

➢WriteHtmlCache:生成缓存。

➢ReadHtmlCache:读取缓存。

行为的基类为Behavior,允许开发人员通过继承的方式扩展行为。关于行为的使用,本章后面将详细介绍,在此读者只需要理解行为的作用即可。

5.函数扩展

通过自定义函数可以实现函数的扩展,函数扩展在前面章节内容中已经多次介绍,读者应该已经掌握,在此不再过多介绍。

6.增强扩展

通过自定义的类库扩展可以实现系统本身不内置的功能,例如发送电子邮件、GD绘图等。这也是本章重点介绍的内容。