417 12
发新话题
打印

ThinkPHP入门指南

3.11 系统基类库
ThinkPHP内置系统基类库,用途是支持框架本身运行和提供给应用开发所需的常用类库。其中包括了两个大类:
Think类库包属于系统运行类库,系统运行必须,该类库包由官方负责维护和更新。
Think.Core 核心类库包
Think.Db 数据库类库包
Think.Util 工具类库包
Think.Exception 异常处理类库包


ORG类库包中则包含了更丰富的类库支持,通常这些类库并不是运行ThinkPHP必须的。开发人员在应用开发过程了如果使用了其他第三方类库,可以放置到该类库包或者相应目录下面。

ThinkPHP框架中引用基类库和应用类库的方式都采用命名空间引用方式,可以通过使用 Import ("Think.Util.HashMap") 的方式来方便地引入类库。如果需要引入多个类库,可以使用Import ("Think.Util.*") 的方式。

ThinkPHP基类库和ORG类库中提供很多实用的工具类,这些工具类包括:
ArrayObject 模拟了SPL 的 ArrayObject类
ArrayList 模拟了Java中的ArrayList类
ListIterator 模拟了PHP的Iterator接口
FileIterator 模拟了SPL中的FileIterator 类
DirectoryIterator 模拟了SPL中的DirectoryIterator 类
Stack 模拟了 堆栈类
Session 扩展了Session类,可以支持Session空间
UploadFile 非常强大的文件上传类
Validation 表单验证类,通过正则表达式扩展
Log 日志记录类
Date 强大的日期处理类
Image 图像处理和生成类,可以很方便地生成图像验证码
Cache 缓存类,支持多种缓存方式,包括文件方式

TOP

3.12 模版引擎
ThinkPHP内置了一个性能卓越的模板引擎,以插件的形式提供,是一个使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库,利用该模板引擎可以方便地定义模板文件,从而达到快速开发的目的。其特点包括:
1、支持XML标签库技术和普通标签定义;
2、只需编译一次,下次直接运行而无需重新编译;
3、模板更新后,自动更新模板缓存;
4、自动加载当前操作的模板缓存文件,无需指定模板文件名称;
5、支持编码转换和Content-Type 更换;
6、模板变量输出前缀支持,避免变量名称冲突;
7、模板常量替换,无需设置模板变量;
8、支持函数功能和格式化功能;
9、自动对象初始化,无需额外加载和初始化模板对象。


ThinkPHP内置模板引擎的的模板标签有两种类型:第一种是普通标签,类似于Smarty的模板标签,在功能方面作了部分简化,增强了显示功能,弱化了逻辑控制功能;第二种是XML标签库形式,该模板技术是新版(0.8版本以上才支持)新增的标签技术,有效地借鉴了Java的标签库技术,在控制功能和各方面都比较强大,而且允许自定义标签库,是新版ThinkPHP系统引入和推荐的模板标签技术。两种标签方式的结合使用,可以让您的模板定义功能相当强大。

ThinkPHP架构的设计中模板和程序完全分离,一套模板文件就是一个目录,模板是标准html文件(可以配置成其它后缀,如.shtml,.xml等),可以单独预览。

总体上来说,ThinkPHP的模板引擎以使用方便为第一考虑,因为谈到执行效率没有模板效率更高,因此,过多地增强模板引擎的功能并无益处(即使是编译型模板引擎),适可而止最好。

模板引擎的最重要的功能莫过于输出,如果加入过多的控制、甚至逻辑在里面恐怕不是明智之举,但是给模板引擎预留好接口,保证一定程度的扩展性才能满足以后不断增长的需求。本着这样的一个原则,我设计了ThinkPHP的模板引擎,希望不要有人抱怨ThinkPHP的模板引擎控制功能不够强大。

由于使用了模板动态缓存技术,在您第一次运行某个模块的某个操作时候,对应的模板文件就会被缓存,下次读取的时候,无论是模板文件修改或者是缓存文件被删除,系统都会重新生成缓存文件。你可以设置模板缓存的有效时间间隔,如每隔10分钟重新读取模板文件。模板动态缓存只是让您免去每次重复编译模板的时间。
我们会分别讲述普通模版和XML模版的标签使用。
目 录 1. 普通标签使用 2. XML标签 3. 混合标签使用 4. 使用第三方模版引擎

TOP

3.13 异常、错误和调试
异常处理是任何应用开发都会频繁涉及的,而在PHP4中是不支持异常处理的。但是ThinkPHP实现了兼容PHP4和PHP5的异常处理机制,隐藏了系统内部的异常处理兼容环节,呈现给开发人员的异常接口无论是PHP4还是PHP5都是一致的。

在App应用类中,使用了AppError和AppException方法来自动处理错误(包括警告等)和异常,如果要手动抛出错误和异常,需要使用trigger_error和throw_exception方法。
目 录 1. 异常和错误处理 2. 系统调试

TOP

3.14 数据缓存
ThinkPHP框架为了让应用执行更有效率,采用了多种缓存机制和方法。
这里指的缓存主要指数据缓存,关于模版缓存的描述在模版定义一篇中已经有所涉及。

ThinkPHP在数据缓存方面包括SQL查询缓存、数据对象缓存、静态页面缓存以及浏览器缓存等多种机制,采用了包括文件方式、共享对象方式和数据库方式在内的多种方式进行缓存,让应用开发可以选择更加适合自己的缓存方式,以及合理的进行整合,从而有效地提高应用执行效率。

Action类中实现了几个重要的缓存方法,同样,在Dao对象中也提供了相应的方法对Vo、VoList对象和查询数据集对象ResultSet进行缓存处理。
而对于SQL查询的缓存实现是在公共查询方法query里面内置实现了。
目 录 1. 数据对象缓存 2. 动态数据缓存 3. 浏览器缓存 4. 静态缓存 5. 视图缓存

TOP

3.15 安全体系
企业级的应用是离不开安全保护的,ThinkPHP以基于Spring的Acegi安全系统作为参考原型,并做了简化,以适合目前的ThinkPHP结构,提供了一个多层的、可定制的安全体系来为应用开发提供安全控制。安全体系中主要有:
安全拦截器
认证管理器
决策访问管理器
运行身份管理器

安全拦截器
安全拦截器就好比一道道门,在系统的安全防护系统中可能存在很多不同的安全控制环节,一旦某个环节你未通过安全体系认证,那么安全拦截器就会实施拦截。

认证管理器
防护体系的第一道门就是认证管理器,认证管理器负责决定你是谁,一般它通过验证你的主体(通常是一个用户名)和你的凭证(通常是一个密码),或者更多的资料来做到。更简单的说,认证管理器验证你的身份是否在安全防护体系授权范围之内。

访问决策管理
虽然通过了认证管理器的身份验证,但是并不代表你可以在系统里面肆意妄为,因为你还需要通过访问决策管理这道门。访问决策管理器对用户进行授权,通过考虑你的身份认证信息和与受保护资源关联的安全属性决定是是否可以进入系统的某个模块,和进行某项操作。
例如,安全规则规定只有主管才允许访问某个模块,而你并没有被授予主管权限,那么安全拦截器会拦截你的访问操作。
决策访问管理器不能单独运行,必须首先依赖认证管理器进行身份确认,因此,在加载访问决策过滤器的时候已经包含了认证管理器和决策访问管理器。

为了满足应用的不同需要,ThinkPHP在进行访问决策管理的时候采用两种模式:登录模式和即时模式。
登录模式,系统在用户登录的时候读取改用户所具备的授权信息到Session,下次不再重新获取授权信息。也就是说即使管理员对该用户进行了权限修改,用户也必须在下次登录后才能生效。
即时模式就是为了解决上面的问题,在每次访问系统的模块或者操作时候,进行即使验证该用户是否具有该模块和操作的授权,从更高程度上保障了系统的安全。

运行身份管理器
运行身份管理器的用处在大多数应用系统中是有限的,例如某个操作和模块需要多个身份的安全需求,运行身份管理器可以用另一个身份替换你目前的身份,从而允许你访问应用系统内部更深处的受保护对象。这一层安全体系目前的RBAC插件中尚未实现。
目 录 1. RBAC认证

TOP

3.16 JS和AJAX支持
ThinkPHP提供了导入Js类库的快捷方法,并且完全支持Ajax,官方的发布包里面内置了一个用于AJAX操作的SmartAjax和ThinkAjax类库,你可以不通过任何其他Ajax类库包就可以在ThinkPHP中使用Ajax支持。
目 录 1. 导入JS类库 2. SmartAjax和ThinkAjax类库 3. AJAX文件上传

TOP

3.17 插件支持
ThinkPHP的插件机制参考了WordPress的插件实现,用途是为了简化核心类库、集中优化框架核心,便于扩展和替换框架功能。

本着这样的一个原则,ThinkPHP把早期内置的一些功能独立出来,作为插件方式提供。一方面是为了让框架核心类库更加容易维护,另外一方面也方便高级开发人员在不修改框架核心代码的情况下增强核心功能,而不用担心系统升级问题。当然,还有一个副作用就是提供了一些插件实现参考例子,呵呵~比较典型的插件例子就是官方的模版引擎插件和RBAC权限认证插件。
目 录 1. 插件规范 2. 过滤插件 3. 模块插件 4. 操作插件 5. 模版引擎插件

TOP

 417 12
发新话题