前面介绍过,系统内置的行为是系统正常执行的基础,所以开发人员不需要改动这些扩展。事实上系统已经提供了一系列行为扩展,在项目中使用时,直接配置即可。配置项LIMIT_REFLESH_TIMES表示刷新的间隔,以秒为单位。......
2023-11-04
前面介绍过系统共支持8大类扩展,这些扩展是系统原生支持的,但扩展类库文件并非系统内置,需要开发人员手动下载,读者可以在http://www.thinkphp.cn/extend/找到相关信息及扩展文件。下面分别介绍。
1.模式扩展
传统意义上,一般使用MVC进行开发就是指网站开发,所谓的网站开发需要由视图、控制器、模型组成。但是随着互联网的发展,很多情况下网站只是其中的一个单元,共同构造运营平台的还有客户端、开放API、CRM(客户管理系统)、OA(办公自动化系统)等。如何将这些单元或设备整合到一起,是网站开发人员需要面对的问题。ThinkPHP的模式扩展很多情况下就适用于开发这些模块,以简化开发难度,提高运行速度。系统共支持7种模式扩展,下面将分别对最常用的几种模式进行介绍。
(1)简洁模式
系统在初始化时,默认使用标准模式运行。标准模式最典型的模块有视图、数据库ORM等。简洁模式就是将标准模式进行了简化,使得项目改变运行模式,处于简洁模式的项目具有以下特性。
➢不支持模块(控制器)分组。
➢不载入视图引擎(但可以手动调用)。
➢不支持数据模型(数据映射、CURD、字段处理等),只能使用原生SQL操作数据库。
➢只载入MySQL数据库驱动。
➢不载入多语言处理模块。
➢不支持Dispatch路由。
➢不能使用系统内置扩展,但可以使用自定义扩展。
简洁模式通过减少模块的载入,从而使框架更加轻量级。由于没有视图引擎,所以简洁模式非常适合开发类似于Ajax后台、JavaScript输出等简单的应用。定义简洁模式,只需要在项目入口文件定义MODE_NAME常量值为Thin即可,如以下代码所示。
(2)精简模式
精简模式是一种比简洁模式提供更多功能的应用开发模式。精简模式非常适合开发小型的留言板、向导系统等。精简模式的MODE_NAME常量值为Lite,如以下代码所示。
与简洁模式相比,精简模式在简洁模式的基础上增加了如下几项特性。
➢载入系统默认的视图引擎。
➢支持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,如以下代码所示。
命令行模式非常适合于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即可。如以下代码所示。
将运行模式改为amf后,还需要在配置文件中定义允许被RemoteObject调用的控制器,如以下代码所示。
(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,如以下代码所示。
然后在项目配置文件中定义公开可调用的控制器即可,如以下代码所示。
将项目改变phprpc模式,可以让项目专注于处理rpm调用,而不需要处理Web实现,例如WebService处理等,非常适合开发网站API。
2.控制器扩展
一个控制器就是一个文件类,例如UserClass。开发人员可以通过控制器扩展,实现为控制器添加附加功能,例如客户端判读、权限检验等。控制器扩展需要使用_initialize方法接口实现,如以下代码所示。
3.模型扩展
模型提供了对数据表直接操作的作用,通过模型扩展,可以增强模型的功能。系统本身内置了多种扩展模型,如AdvModel(高级模型)、RelationModel等。与控制器一样,模型的扩展接口也是_initialize方法,开发人员可以使用_initialize方法实现模型接口的初始化,调用基础类库或者函数等。扩展模型允许使用模型内置的增强方法,如_before_insert、_after_insert等,从而实现更高级的CURD操作。可扩展的模型增强方法如表11-1所示。
表11-1 CURD操作接口
如表11-1所示,参数$data表示传入或返回的数据信息(数组类型);参数$options表示返回当前操作的模型名称及表前缀(数组类型)。其中更新前操作及更新后操作还可以使用_facade($data)代替。CURD扩展接口的使用如以下代码所示。
4.行为扩展
行为相当于请求管理器,行为可以根据URL动作请求,在执行动作前执行的一系列系统扩展功能。例如URL路由检测、模板定位、令牌生成等。系统共内置了8大行为,如下所示。
➢checkRoute:检测URL路由。
➢LocationTemplate:定位模板文件路径。
➢ParseTemplate:调用模板解释引擎。
➢ShowPageTrace:显示页面Trace信息。
➢ShowRuntime:显示系统运行时间。
➢TokenBuild:初始化表单令牌。
➢WriteHtmlCache:生成缓存。
➢ReadHtmlCache:读取缓存。
行为的基类为Behavior,允许开发人员通过继承的方式扩展行为。关于行为的使用,本章后面将详细介绍,在此读者只需要理解行为的作用即可。
5.函数扩展
通过自定义函数可以实现函数的扩展,函数扩展在前面章节内容中已经多次介绍,读者应该已经掌握,在此不再过多介绍。
6.增强扩展
通过自定义的类库扩展可以实现系统本身不内置的功能,例如发送电子邮件、GD绘图等。这也是本章重点介绍的内容。
有关PHP MVC开发实战的文章
前面介绍过,系统内置的行为是系统正常执行的基础,所以开发人员不需要改动这些扩展。事实上系统已经提供了一系列行为扩展,在项目中使用时,直接配置即可。配置项LIMIT_REFLESH_TIMES表示刷新的间隔,以秒为单位。......
2023-11-04
ThinkPHP的一大特点就是扩展灵活,同样行为也是可以自定义扩展的。接下来将深入介绍自定义行为扩展的实现。上述代码是一个名为AutoCheckUserLogin的自定义行为类。最后还需要确保自定义行为类继承于Behavior基类。事实上,AutoCheckUserLogin配置项并不是必需的,也就是说在配置时,自定义行为就已经能够正常运行了,配置项只不过用于实现灵活的配置。此时,再次访问项目,只有Index控制器下的页面受AutoCheckUserLogin自定义行为影响,其他页面则不受影响。......
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
下面将分别对常用的扩展函数进行讲解。最终将会得到“一个多字节安全的substr()操作基础上的字...”,读者可以在此基础上继续完善msubstr函数。build_count_rand函数返回的结果是关联数组,在实际应用开发中,可以将结果循环插入数据库等。byte_format函数通常用于上传文件检测,或者统计用户使用空间大小等。......
2023-11-04
在网站开发中处理时间日期数据是比较烦琐的工作,例如计划日期时差、日期转星期、指定日期倒计时等。系统内置了Date扩展类,能够让日期数据处理变得快捷、简单。上述代码运行结果为“1.4246575342466”,即1.4年。其中参数time表示与构造函数日期比较的日期数据;参数precision表示结果精度。......
2023-11-04
前面已经简单介绍过ThinkPHP视图引擎,这些标签处理机制类似于JSP tag,使用XML作为标签的渲染方式,开发人员可以方便地在网页中嵌入XML标签,然后由ThinkPHP视图引擎解释成标准的PHP代码。ThinkPHP的视图引擎之所以高效,主要体现在它的标签扩展性。ThinkPHP的视图标签扩展性够完美地与后台控制器代码相结合,例如在Smarty中使用函数功能,首先需要在后台PHP代码注册,而在ThinkPHP中完全不需要,如以下代码所示。......
2023-11-04
对于普通的开发者而言,最需要关注Lib目录及Extend目录,接下来分别进行介绍。由于ThinkPHP遵循Apache 2.0协议,意味着PHP开发人员可以通过修改ThinkPHP源代码,以便更适合自己的开发需求,这就要求开发人员必须要对Extend目录下的扩展类库要有深入的认识。......
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
相关推荐