ThinkPHP框架

thinkphp

  编辑
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最先诞生于2006年初,2007年元旦正式改名为ThinkPHP,而且遵循Apache2 开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。而且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。[1]  
ThinkPHP是一个快速、兼容并且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式改名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并作了改进和完善,同时也借鉴了国外不少优秀的框架和模式,使用 面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib( 标签库)、RoR的ORM 映射和ActiveRecord模式。
ThinkPHP能够支持windows/ Unix/Linux等服务器环境,正式版须要 PHP5.0以上版本支持,支持MySql、 PgSQLSqlite多种数据库以及PDO扩展,ThinkPHP框架自己没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
做为一个总体开发解决方案,ThinkPHP可以解决应用开发中的大多数须要,由于其自身包含了底层架构、兼容处理、 基类库、数据库访问层、 模板引擎、缓存机制、 插件机制、角色认证、 表单处理等经常使用的组件,而且对于跨版本、跨平台和跨数据库移植都比较方便。而且每一个组件都是精心设计和完善的,应用开发过程仅仅须要关注您的业务逻辑。
 
外文名
ThinkPHP
定    义
一个开源轻量级 PHP框架
原    名
FCS
诞    生
于2006年初

发展历史

编辑
ThinkPHP发展历程,无数TPer一块儿见证了ThinkPHP的成长:
2006年01月15日, ThinkPHP的雏形版本FCS0.6.0发布;
2006年02月12日,(元宵节)发布FCS 0.6.
1 版本, Google讨论组成立;
2006年03月15日, FCS 0.7.0版本发布;
2006年05月07日, FCS 0.8版本发布;
2006年10月25日, FCS 0.9.0版本发布;
2006年12月25 日,SF项目和Google网站ThinkPHP项目申请完成;
2007年01月01日, FCS正式改名为ThinkPHP;
2007年01月08日, ThinkPHP 0.9.5版发布同期官方网站开通;
2007年02月21日, TOPThink社区暨新版ThinkPHP官方网站开通,并提供社区支持;
2007年02月25日, 发布ThinkPHP 0.9.6版本,完成FCS到ThinkPHP的正式迁移;
2007年04月29日, ThinkPHP发布0.9.7版本;
2007年07月01日, ThinkPHP发布0.9.8版本;
2007年10月15 日,ThinkPHP发布1.0.0RC1版本,完成PHP5的重构;
2007年12月15 日,ThinkPHP发布1.0.0正式版本标志着ThinkPHP步入轨道;
2008年10月01日, ThinkPHP发布1.0.3正式版本;
2008年12月25 日,ThinkPHP发布1.5正式版本并启动商业化支持服务,ThinkPHP进入稳定发展;
2009年05月01日, ThinkPHP 发布1.6.0RC1版本;
2009年10月01日, ThinkPHP发布2.0版本完成新的重构和飞跃,这是一次划时代的版本;
2012年04月05日, ThinkPHP发布3.0版本 庆祝ThinkPHP发布6周年;
2012年10月08日, ThinkPHP发布3.1版本;
2012年11月11日, ThinkPHP3.1.2扩展包;
2013年05月09日,ThinkPHP发布3.1.3完整版;
2013年12月18日,ThinkPHP发布3.2正式版;
2014年10月31日,ThinkPHP发布3.2.2完整版[2]   ;
2015年12月11日,ThinkPHP 5.0 Beta 发布;
2017年02月27日,Thinkphp5.0.5完整版正式发布[3]   ;

特性

编辑

简单易用

模型(M):模型的定义由Model类来完成。Model类位于项目目录下面的LibModel目录。
THINKPHP初始页面 THINKPHP初始页面
控制器(C):应用控制器(核心控制器)和Action控制器都承担了控制器的角色,区别在于Action控制器完成业务过程,而应用控制器(App类)负责调度控制。Action控制器位于项目目录下面的LibAction目录。
视图(V):模板的实现是和框架无关的,作到了100%分离,能够独立预览和制做。模板目录位于项目目录下面的Tpl目录。

首创机制

ThinkTemplate是一个使用了XML 标签库技术的编译型 模板引擎,支持两种类型的模板标签,使用了 动态编译和缓存技术,并且支持自定义标签库。其特色包括:
1)支持XML标签库和普通标签的混合定义;
2)编译一次,下次直接运行而无需从新编译;
3)模板文件更新后,自动更新模板缓存;
4)自动加载当前操做的模板缓存文件,无需指定模板文件名称;
5)支持编码转换和 Content-Type更换;
THINKPHP目录结构 THINKPHP目录结构
6)模板变量输出前缀支持,避免变量名称冲突;
7)模板常量替换,无需设置模板变量;
8)支持变量组合调节器和格式化功能;
9)支持替换其它 模板引擎 插件使用;
10)支持获取模板页面内容。
内置 XML模板引擎,支持 标签库
富模型支持
1)聚合模型:
聚合模型是一种虚拟模型,用于把数据表的字段抽象化,更加容易理解和操做。
咱们能够把数据表中的某些属性进行 数据封装,这样就把枯燥的数据表字段赋予更好的可读性。
2) 静态模型
静态模型可让模型的数据静态化,而不须要频繁和数据库打交道,能够用于不常常改变的数据表。并且ThinkPHP在ORM层上面模拟实现了数据库的 视图功能,这是ThinkPHP首创的一项技术,使得多表的关联查询具备更高的效率和可操做性,而无需定义复杂的关联关系,让关联关系更加浅显易懂。
有些时候,数据表的数据一旦添加后就再也不容易变化,咱们更但愿把这样的模型数据静态化,而不须要再次访问数据库。ThinkPHP支持 静态模型的概念,一旦把模型设置为静态,那么会在第一次初始化的时候获取数据表的所有数据,并生成缓存,之后不会再链接数据库。而只须要直接访问模型的dataList数据便可。
3)视图模型
ThinkPHP在ORM模型里面模拟实现了数据库的视图模型,该功能能够用于多表查询。
要定义 视图对象,须要设置viewModel为true,而后设置viewFields属性便可。
CURD和操做高度自动化支持
ThinkPHP提供了灵活和方便的数据操做方法,不只实现了对数据库操做的四大基本操做(CURD):建立、读取、更新和删除的实现,还内置了不少实用的数据操做方法,提供了ActiveRecords模式的最佳体验。
丰富的查询语言支持
ThinkPHP大多数状况使用的都是对象查询,由于充分利用了ORM查询语言,了解查询条件的定义对使用对象查询很是有帮助,对于复杂的查询,或者从安全方面考虑,可使用HashMap对象或者 索引数组来传递查询条件。
目录结构自动建立THINKPHP目录结构
ThinkPHP具备项目目录自动建立功能,你只须要定义好项目的入口文件,第一次执行入口文件的时候,系统会自动建立项目的相关目录结构,若是是linux环境下面须要给项目入口文件里面指定的路径设置可写权限。
ThinkPHP的模型支持主从式数据库的链接,配置DB_DEPLOY_TYPE为1能够采用 分布式数据库支持。
多数据库链接和切换支持
若是须要在特殊的时候链接多个数据库,那么能够尝试使用ThinkPHP的多数据库链接特性:包括相同类型的数据库和不一样类型的数据库。(注意:所谓的相同类型数据库的定义是指和项目配置文件或者模型的数据库链接的数据库类型相同。)
ActiveRecords模式和丰富的ROR特性
ThinkPHP实现了ActiveRecords模式的ORM模型,采用了非标准的ORM模型:表 映射到类,记录(集)映射到对象,字段属性映射到对象的虚拟属性。最大的特色就是使用方便,从而达到 敏捷开发的目的。
灵活简单的项目配置
ThinkPHP提供了灵活的配置功能,采用最有效率的PHP返回 数组方式定义,支持惯例配置、项目配置、调试配置和模块配置,而且会自动生成配置缓存文件,无需重复解析的开销。对于有些简单的应用,你无需配置任何配置文件,而对于复杂的要求,你还能够增长模块配置文件,另外ThinkPHP的动态配置使得你在开发过程当中能够灵活的调整配置参数。
ThinkPHP在项目配置上面创造了本身独有的分层配置模式,其配置层次体如今:惯例配置-->项目配置-->模块配置-->操做(动态)配置,优先顺序从右到左(在没有生效的前提下)。
模型自动验证和处理
系统内置了 数据对象的自动验证功能,而大多数状况下面,数据对象是由 表单提交的$_POST数据建立。须要使用系统的自动验证功能,只须要在Model类里面定义$_validate属性,是由多个验证因子组成的 数组,支持的验证因子格式:验证字段,验证规则,错误提示,验证条件,附加规则,验证时间。
静态页面生成和多元化缓存机制
ThinkPHP内置了静态 缓存的功能,而且支持静态缓存的规则定义。要使用静态缓存功能,须要开启HTML_CACHE_ON参数,而且在项目配置目录下面增长静态缓存规则文件htmls.php。
丰富的数据库及 PDO支持
SEOURL 路由支持
AJAX支持
易扩展的系统 基类
系统基类库
ThinkPHP框架经过基类库的概念把全部系统类库都集成在一块儿,包括ThinkPHP的核心类库。
基类库分红Think核心类库、ORG扩展类库,在这主要介绍的是核心基类库,核心基类库的做用是完成框架的通用性开发而必须的基础类和经常使用工具类等,包含有:
Think.Core 核心类库包
Think.Db 数据库类库包
Think.Util  系统工具类库包
Think.Template 内置模板引擎类库包
Think.Exception 异常处理类库包函数库
ThinkPHP内置了一个系统公共函数库,提供了一些系统须要的函数,系统函数库位于ThinkPHP的Common目录下面,名称为functions.php。
每一个项目能够定义本身的函数库,位于项目的Common目录下面的common.php文件。
若是项目在Common目录下面有定义本身的common.php文件,框架会在初始化的时候自动导入,而无需本身导入。
匹配导入
Import方法是ThinkPHP内建的类库和文件导入方法,提供了方便和灵活的相似于命名空间的文件导入机制。
自动 编码转换
ThinkPHP框架的文件所有采用UTF-8编码格式,UTF-8的支持和自动输出编码转换的功能让页面表现更加灵活。您能够配置输出的页面编码格式,如 gb2312等(默认采用UTF-8输出)。系统根据配置文件中设置的编码格式自动对页面进行编码转换,支持 iconv和mb_string两种方式,为了提升效率,若是系统的模板编码设置和输出编码设置项相同,则不会进行编码转换。ThinkPHP能够设置模板编码、输出编码和数据库编码,并自动完成转换工做,让你的应用再也不受编码的苦恼。

重要的概念

编辑
要掌握ThinkPHP,首先要了解其中的几个重要概念,对于熟悉Java开发的朋友,应该很容易理解下面的一些概念。

Action对象

和Struts框架的Action相似,Action对象主要提供应用逻辑的控制和处理,属于ThinkPHP的控制层,由核心的App类完成模块和操做的解析后直接转交给相应的Action对象处理。应用类中的全部Action对象都继承系统的Action 基类

Dao对象

是指DataAccessObject( 数据访问对象),Dao设计模式把底层的数据访问逻辑和业务逻辑分开,夹在业务层与数据层中间,用于数据库访问和操做。能够针对单表和多表操做。ThinkPHP中的Dao对象属于创建在抽象数据库访问层之上的事务性对象。

VO对象

是指ValueObject( 数据对象),更加精确的说是 业务对象,由于VO对象是存活在业务层的,供业务逻辑使用的。VO对象和数据表存在一种 映射关系,VO对象的每一个属性对应数据表(或者 视图)的一个字段,你彻底能够添加其余非数据表字段的VO对象属性,以用于业务逻辑操做,例如关联字段。VO对象有个特殊的保留属性_info,是一个 数组变量,用来保存该VO对象的一些特殊信息。和VO对象对应的概念还有PO(持久数据对象),VO和PO的概念都来自于O/RMapping(ObjectRelationalMapping,对象关系映射),PO只能用在数据层(也就是说PO对象的属性必须和数据表一一对应),VO用在 业务逻辑层表示层(能够有本身的额外属性)。各层操做属于该层本身的 数据对象,这样就能够下降各层之间的耦合,便于之后系统的维护和扩展。若是将PO用在各个层中就至关于咱们使用 全局变量,咱们知道在OO设计很是不同意使用全局变量。

VoList对象

在ThinkPHP框架中,把查询后的数据集(ResultSet)转换成数据列表对象,也就是VOLIST对象,和ResultSet对象不一样的是每一个记录就至关于一个VO对象。在VOLIST对象中能够方便地遍历和操做VO对象。VO对象和VOLIST对象都属于ThinkPHP框架中的实体对象,是数据操做的基本元素。若是你在开发过程当中没有使用Dao模式,而是经过数据库驱动类直接操做数据库,那么返回的是ResultSet对象。ThinkPHP系统提供了从ResultSet对象转换为VOLIST对象的方法。
组件和 插件支持
基于角色的权限控制体系
企业级的应用是离不开安全保护的,ThinkPHP以基于 SpringAcegi 安全系统做为参考原型,并作了简化,以适合目前的ThinkPHP结构,提供了一个多层的、可定制的安全体系来为应用开发提供安全控制。安全体系中主要有: 安全拦截器、认证管理器、决策访问管理器 、运行身份管理器。

分层架构

编辑
ThinkPHP的分层架构采用 三层架构模式:

表现层

包含模板 视图、用户界面、JS、Flash等经过 模板引擎的支持,可使用标签订义简化表现层的定义工做。

业务层

包含业务接口层、 业务逻辑层、实体层、 数据访问层Action控制器做为业务接口层,提供系统各类业务操做的入口。所以,不提倡在控制器类中写过多的业务逻辑代码,虽说很难严格控制。具体的业务逻辑应该封装到 数据访问对象(Dao)类中实现,若是以为过于复杂,还能够把子业务在Helper类中包装后统一调用。业务处理过程通常会构造出 业务实体对象(如Vo对象),对业务实体对象的存取经过数据访问层完成。数据访问层把实体对象和数据库数据之间创建 映射关系,而且封装了通用的数据操做。

数据层

支持的数据库有MySql、MsSql、PgSql、Oracle、Sqlite,最新版本已经提供PDO的支持,数据库的选用和业务逻辑没有关系。

更新记录

编辑
ThinkPHP 5.0正式版发布 2016/09/15[4]  
主要特性包括:
--------------------------------------------------------------
规范:遵循PSR-二、PSR-4规范,Composer及单元测试支持;
  严谨:异常严谨的错误检测和安全机制,详细的日志信息,为你的开发保驾护航;
  灵活:减小核心依赖,扩展更灵活、方便,支持命令行指令扩展;
  API友好:出色的性能和REST支持、远程调试,更好的支持API开发;
  高效:惰性加载,及路由、配置和自动加载的缓存机制;
  ORM:重构的数据库、模型及关联,MongoDb支持;
  --------------------------------------------------------------
相对于RC4版本,主要更新以下:
请求和路由:
  • Request对象支持动态绑定属性
  • 定义了路由规则的URL原地址禁止访问
  • 改进路由规则存储结构
  • 路由分组功能加强,支持嵌套和虚拟分组
  • 路由URL高效反解
  • 改进Request对象param方法获取优先级
  • 路由增长name方法设置和获取路由标识
  • 增长MISS和AUTO路由规则
  • Route类增长auto方法 支持注册一个自动解析URL的路由
  • 路由规则支持模型绑定
  • 路由变量统一使用param方法获取
  • 路由规则标识功能和自动标识
  • 增长生成路由缓存指令 optimize:route
  • Request对象增长route方法单独获取路由变量
  • Request对象的param get post put request delete server cookie env方法的第一个参数传入false 则表示获取原始数据 不进行过滤
  • 改进自动路由标识生成 支持不一样的路由规则 指向同一个路由标识,改进Url自动生成对路由标识的支持
  • 改进Request类 filter属性的初始化
  • 改进Request类的isAjax和isPjax方法
  • Request类增长token方法
  • 路由配置文件支持多个 使用 route_config_file 配置参数配置
  • 域名绑定支持https检测
  • 改进域名绑定 支持同时绑定模块和其余 支持绑定到数组定义的路由规则,取消域名绑定到分组
  • 路由规则增长PATCH请求类型支持
  • 增长route_complete_match配置参数设置全局路由规则定义是否采用完整匹配 能够由路由规则的参数complete_match 进行覆盖
  • 改进路由的 后缀参数识别 优先于系统的伪静态后缀参数
  • Url类增长root方法用于指定当前root地址(不含域名)
  • 改进Url生成对可选参数的支持
数据库:
  • 查询条件自动参数绑定
  • 改进分页方法支持参数绑定
  • Query类的cache方法增长缓存标签参数
  • Query类的update和delete方法支持调用cache方法 会自动清除指定key的缓存 配合查询方法的cache方法一块儿使用
  • 改进Query类的延迟写入方法
  • Query类的column和value方法支持fetchsql
  • 改进日期查询方法
  • 改进存储过程方法exec的支持
  • 改进Connection类的getLastInsID方法获取
  • 记录数据库的链接日志(链接时间和DSN)
  • 改进Query类的select方法的返回结果集判断
  • Connection类增长getNumRows方法
  • 数据库事务方法取消返回值
  • 改进Query类的chunk方法对主键的获取
  • 改进当数据库驱动类型使用完整命名空间的时候 Query类的builder方法的问题
模型:
  • 增长软删除功能
  • 关联模型和预载入改进
  • 关联预载入查询闭包支持更多的连贯操做
  • 完善savell方法支持更新和验证
  • 关联定义统一返回Relation类
  • Model类的has和hasWhere方法对join类型的支持
  • Model类的data方法 批量赋值数据的时候 清空原始数据
  • Model类的get方法第三个参数传入true的时候会自动更新缓存
  • Model类增长只读字段支持
  • Model类增长useGlobalScope方法设置是否启用全局查询范围
  • Model类的base方法改成静态定义 全局屡次调用有效
  • Model类支持设定主键、字段信息和字段类型,不依赖自动获取,提升性能
  • Model类的data方法 支持修改器
  • 改进Relation类对非数字类型主键的支持
  • 改进Relation类的一对多删除
日志和缓存:
  • 支持日志类型分离存储
  • 日志容许设置记录级别
  • 增长缓存标签功能
  • 缓存类增长pull方法用于获取并删除
  • cache助手函数增长tag参数
  • 简化日志信息,隐藏数据库密码
  • 增长cache/session redis驱动的库选择逻辑;
  • memcached驱动的配置参数支持option参数
  • 调试模式下面 日志记录增长页面的header和param参数记录
  • memcached缓存驱动增长链接帐号密码参数
  • 缓存支持设置complex类型 支持配置多种缓存并用store切换
  • 缓存类增长tag方法 用于缓存标签设置 clear方法支持清除某个缓存标签的数据
  • File类型日志驱动支持设置单独文件记录不一样的日志级别
  • 改进文件缓存和日志的存储文件名命名规范
  • 缓存类增长inc和dec方法 针对数值型数据提供自增和自减操做
  • Cache类增长has方法 get方法支持默认值
其余:
  • 视图类支持设置模板引擎参数
  • 增长表单令牌生成和验证
  • 增长中文验证规则
  • 增长image和文件相关验证规则
  • 重定向Response对象支持with方法隐含传参
  • 改进Session类自动初始化
  • session类增长pull方法用于获取并删除
  • 增长Env类用于获取环境变量
  • Request类get/post/put等更改赋值后param方法依然有效
  • 改进Jump跳转地址支持Url::build 解析
  • 优化Hook类
  • 应用调试模式和页面trace支持环境变量设置
  • config助手函数支持 config('?name') 用法
  • 支持使用BIND_MODULE常量的方式绑定模块
  • 入口文件自动绑定模块功能
  • 改进验证异常类的错误信息和模板输出,支持批量验证的错误信息抛出
  • 完善console 增长output一些经常使用的方法
  • 增长token助手函数 用于在页面快速显示令牌
  • 增长halt方法用于变量调试并中断输出
  • 改进Validate类的number验证规则 和 integer区分开
  • optimize:autoload增长对extend扩展目录的扫描
  • 改进Validate类的boolean验证规则 支持表单数据
  • 改进cookie助手函数支持 判断是否存在某个cookie值
  • 改进abort助手函数 支持抛出HttpResponseException异常
  • 改进File类增长对上传错误的处理
  • 改进File类move方法的返回对象增长上传表单信息,增长获取文件散列值的方法
  • 改进File类的move方法的返回对象改成返回File对象实例
  • 增长clear和optimize:config 指令
  • 改进File类和Validate类的图像文件类型验证
  • 控制器的操做方法支持注入Request以外的对象实例
  • Request类 param(true) 支持获取带文件的数据
  • input助手函数第一个参数增长默认值
  • Validate类增长image验证规则 并改进max min length支持多种数据类型
  • json输出时数据编码失败后抛出异常
调整:
  • 废除路由映射(静态路由)定义
  • 取消url_deny_suffix配置 改由路由的deny_ext参数设置
  • 模型save方法返回值改成影响的记录数,取消getId参数
  • Request对象controller方法返回驼峰控制器名
  • 控制器前置操做方法不存在则抛出异常
  • Loader类db方法增长name标识参数
  • db助手函数增长第三个参数用于指定链接标识
  • Sqlsrv驱动默认不对数据表字段进行小写转换
  • 移除sae驱动 改成扩展包
  • Oracle驱动移出核心包
  • Firebird驱动移出核心包
  • 取消别名定义文件alias.php
  • 配置参数读取的时候取消环境变量判断 须要读取环境变量的时候使用Env类
  • 环境变量定义文件更改成 .env 由原来的PHP数组改成ini格式定义(支持数组方式)
  • 状态配置和扩展配置的加载顺序调整 便于状态配置文件中能够更改扩展配置的参数
  • 取消域名绑定到路由分组功能
  • 控制器类的success和error方法url参数支持传入空字符串,则不作任何处理
  • 控制器的error success result redirect方法均不须要使用return
  • 建立目录的权限修改成0644
TinkPHP 3.2.2发布 2014/4/15
ThinkPHP3.2.2版本在修正一些BUG后,重写了模块的自动生成,并支持控制器和模型的批量生成,增长了配置文件多格式支持,以及一些小的细节改进,该版本属于小版本更新。
一、应用支持包括PHP/JSON/INI/XML/YAML以及自定义格式的配置文件;
二、支持模块的自动生成和控制器/模型的批量生成;
三、增长插件控制器的访问支持;
四、cookie函数增长httponly参数支持;
五、改进模型类的安全处理;
六、修正了3.2.1发布以来社区反馈的一些BUG(详见更新日志);
TinkPHP3.2.1发布 2014/2/14
相对于3.2.0版本,主要更新以下:
  • 性能较比3.2.0版本提高30%;
  • 应用模块中的类库能够配置不使用命名空间;
  • 支持运行时Lite文件生成,用于替换应用入口文件;
  • 改进路由定义的闭包支持;
  • 增长API应用模式,更加高效;
  • 增长REST、RPC、HPROSE和YAR控制器扩展支持;
  • 增长REPL行为扩展,加强框架开发的调试手段;
  • 重写查询缓存功能;
  • 语言定义支持变量传入;
  • C函数获取配置参数支持默认值;
  • 支持操做方法绑定到类;
  • 改进和修正Image、Verify和Upload类;
  • 修正了3.2.0发布以来社区反馈的一些BUG;
TinkPHP3.2发布 2013/12/18
此次版本的关键词是模块化、驱动化和云平台。
模块化:3.2版本的架构专门为模块化设计作了优化和调整,从而更适合企业级应用,固然这很大一部分得益于对命名空间的支持以及自动加载机制。同时,你会看到一个小的细节,ThinkPHP3.2版本自带了一个应用入口文件和应用目录。
驱动化:3.2版本在设计类库的时候尽可能采用驱动式设计,对于同一功能在不一样环境和类型的操做只须要配置驱动便可轻松移植,不须要改变现有代码,同时也让你的应用可以适用于更多更复杂的运行环境。
云平台:3.2版本在底层核心就包含了对各类云平台的支持,经过定制不一样的应用(场景)模式以及对应的驱动就能够轻松支持云平台的部署开发,你能够实如今本地开发,而后直接无缝部署到云平台,已经支持的包括SAE和BAE3。

  功能:
3.2版本在此前的3.1.3版本之上,引入了命名空间,强化了驱动化和行为,加强了模块化的概念和对云平台的支持,并改进了诸多的细节。
  主要改进包括:
  • 模块化架构的全新设计
  • 全新命名空间和自动导入机制
  • 改进的路由功能
  • 主题的动态切换支持
  • 更强大的Action参数绑定
  • 模型的参数绑定支持
  • 改进的域名部署支持
  • 全新的应用模式
  • 全新重写的工具类(包括图像、验证码和上传等)
  • 提供更好的云平台支持
  • 修正以前发现的众多BUG
注意:3.2以上版本对PHP的版本要求为PHP5.3+ (不包含PHP5.3dev和PHP6)
TinkPHP3.1.3发布 2013/05/09
更新
该版本针对3.1.2进行了一些改进和完善,主要包括:
改进异常处理,支持致命错误捕获;
针对PDO驱动和Sqlsrv驱动的完善,支持参数绑定;
增长变量安全获取和过滤的快捷方法I;
分组支持部署到完整域名或IP;
A和D方法支持跨分组调用;
改进模版引擎的定界符对特殊字符的支持;
修正JS代码可能对模版标签的混淆;
模型的where方法支持屡次调用;
默认关闭页面压缩输出;
异常日志的纪录;
Action类的assign方法支持连贯操做;
数据库错误信息包含错误代码;
修正上一版本的一些BUG;
TinkPHP3.1.2发布 2012/11/17
[更新][5]  
独立分组功能
模板继承
模块和操做映射
AJAX增长jsonp格式支持
分组支持单独配置默认模块和操做
核心编译过程的优化
SAE引擎升级
改进的分页类
修正查询语言的一处安全隐患
ThinkPHP 3.1发布 2012/09/03
[更新]
更加安全的防御和过滤体系
MVC多层支持
Action参数绑定支持
模型命名范围支持
查询条件和SQL预处理功能
动态设置自动验证和自动完成支持
更加灵活强大的缓存管理方法
日志记录简化、增长IP支持
致命错误的捕获机制完善
页面Trace机制改进和分类显示支持
超过128项更新
ThinkPHP 3.0.1 开发版
2012-04-05
[更新]
Action参数绑定支持
模型类命名范围支持
全局系统变量安全过滤支持
增长IS_GET IS_POST IS_PUT 等请求类型常量
日志记录改进 优化日志大小 增长IP记录
U函数对子域名部署的加强和优化
模型类增长filter连贯操做方法 用于对数据的安全过滤
模型类的data方法支持获取当前数据对象
Action类增长_param方法支持 能够自动根据当前提交类型 获取参数
Action类的_get _post方法支持多函数过滤
改进 ajaxReturn方法
改进success和error方法
增长自动验证的规则
分组模式下模型分组能够自动加载
模型类增长close方法 驱动类支持多数据库链接关闭
模型类增长表单提交字段合法性检测 配置insert_fields 和 update_fields
模型强制进行数据字段类型验证
增长DB_SLAVE_NO配置参数 用于指定读服务器的序号
优化模型的create方法的数据对象生成
自动验证的function和callback规则支持多字段
[3.0版本]2012-3-23
[修正]
修正 视图模型扩展的checkOrder方法
修正U方法对默认分组的完善
修正 Redis缓存类
修正sqlsrv驱动
修正模式扩展中的Model类
修正模型的where方法传人空参数的时候致使delete方法删除所有数据的问题
修正路由定义的大写被强制转换为小写的错误
修正静态缓存读取行为扩展
修正Pgsql驱动
修正S方法的缓存有效期
修正Mongo驱动类
[删除]
取消path_info标签扩展位置
取消TAG_NESTED_LEVEL配置参数,该参数已经无效
取消CheckTemplate行为扩展 并入核心App类的init方法
[增长]
App类增长action_name 行为标签位置 用于改变操做方法名
增长引擎扩展 SAE归入第一个引擎扩展
增长ENGINE_PATH常量定义 用于引擎扩展使用
增长PATH_INFO的兼容判断功能
增长URL_PATHINFO_FETCH配置参数
增长FireShowPageTrace行为扩展 能将Trace信息输出到火狐的firebug
增长Wincache缓存扩展驱动
[完善]
SAE引擎代码优化
优化ThinkPHP入口文件
改进模块名的安全检测 取消异常抛出改为引导到空模块环节
改进Widget类的template属性处理,不区分大小写 方便定义
模型的field方法支持 field(true) 用法 表示获取数据表的所有字段 (而不是*)
改进对mysql驱动的关键字处理方法parseKey
改进MongoDb驱动对读写分离的支持
改进模板引擎的标签别名解析 别名能够无须要定义解析方法
改进Db和 sqlite缓存驱动类对有效期参数的判断
规则路由定义支持完整匹配
改进模板检测的自定义模板目录支持
[调整]
系统调试模式配置文件关闭模板缓存
模板字符串替换定义TMPL_PARSE_STRING区分大小写
配置参数只支持一级不区分大小写 二级如下配置参数区分大小写调用
行为日志记录类型改成Log::INFO 类型,方便经过配置文件 单独关闭相关行为日志显示和记录
checkLang行为扩展调整语言包命名规范调整 项目公共语言包 common.php 分组语言包 分组名.php 模块语言包 分组名_模块名.php 或者 模块名.php
[2.1版本]2011-4-30
此次的重点更新是在核心应用上的改造和效率方面的提高,主要体如今:
URL 路由灵活模式,支持常规路由定义,正则路由匹配
对比2.0版本,新的路由模式更体贴和应用更方便,同时在执行效率上也获得了更简洁而有效的处理。最重要的是定义路由将更简单和直接,而且可选择使用独立文件定义或是直接配置定义。
2.1版本对分组模式完善了细节流程上的解析机制,增长了实用的常量定义和模板替换,同时添加了对二级域名的友好支持,对项目部署提供了更多方便
ThinkPHP内置 模板引擎舍弃了原来 xml模式的解析,直接改由 类属性进行定义标签,既减小了文件加载,提高了解析效率,在 自定义标签和标签扩展上,也更加简单和方便了
容许项目指定编译缓存文件定义
系统函数库functions列入核心编译文件,再也不默认绑定到核心编译
以上两项更新虽微,但实际上意义非凡,对于多项目多应用同时部署架构时会起到很是重要的做用,核心的自由度更宽更广了。
改进tag函数,插件机制能够直接定义要执行的行为
 项目初始化提供新的可自定义的部署模式
容许自定义项目首次运行时的访问处理方式,系统由原来的简单成功提示,改成探针模式友好提示,对于使用ThinkPHP部署的项目,在初始运行时将方便地提供服务器相关信息,对是否支持ThinkPHP运行环境进行探测并报告和提出建议。
提供AMF模式支持
 提供PhpRPC模式(感谢vanvvdot提供扩展)
 lite模式加强,支持使用内置 模板引擎
 数据插入时容许进行更新操做
 提供了更简洁的连贯操做方式的数据库切换
 新增模板 常量、变量定义等实用标签
 其它一些应用细节处理可对比svn更新记录
 Images图像类恢复图片水印支持
 Model类恢复批量插入数据的addAll方法
 优化项目核心运行进程细节,去掉不经常使用功能。
 优化系统进程统计处理,提供G函数可进行记录和统计。
 完善了多语言在各服务器环境下的兼容性统一
 完善了RelationModel方法兼容问题
 完善了序列化字段处理
 完善了数据编辑的时候惟一检测的验证
 增长是否记录异常信息日志开关 LOG_EXCEPTION_RECORD
 去除了原svn上的二级域名支持
 去除了原svn上的先后置判断处理
 去除了个别不通用功能和配置
 去除了URL重定向处理,减小HTTP请求的同时,也避免了所以带来的一些错误。
 对于以上已去除的功能开关再也不生效
[1.0.4 版本] 2008-5-16
修正关联写入和数据字段过滤的冲突
修正哈希子目录缓存方式
模块配置文件命名改成:模块名+_config.php
修正Compare标签
修正CX标签库的判断标签
修正模板引擎的IF标签的条件BUG
修改多数据库链接和切换机制,取消addConnect方法的eqType参数,避免了因来回切换的时候的错误
修正Db缓存和Sqlite缓存的数据过时判断
增长项目配置检测,若是项目配置文件发生修改,则从新生成编译项目缓存。
增长跳转页面模板和404模板配置配置方式和Action类的display方法templateFile参数一致,默认配置: 'ACTION_JUMP_TMPL'=> 'Public:success', 'ACTION_404_TMPL'=> 'Public:404'
Action类增长404操做方法页面跳转操做和404操做支持模板文件配置
修正html标签库的link和import标签
增长数据查询的IS NULL 和 IS NOT NULL支持
修正连贯操做的一些警告错误
完善join分析 支持left right等方式
修正模板引擎在开启短标签的状况下没法正常输出 xml标识的问题
修正ORG.Date.Date类的maxDayOfMonth方法
完善多数据库链接的切换
修改命令行自动建立工具build
修正连贯操做的field方法的判断错误
修正Db类的一处where条件判断的小问题
rand_string加上中文随机字符串生成
修正兼容方法 json_encode对布尔值的判断
修正ArrayList类的addall方法
修正max min avg sum等查询方法返回浮点型数据错误的问题
修正数组方式查询的本身使用Like问题
iterate标签增长mod属性,用于计算循环变量的取模替换原来的odd属性
增长Input类,用于输入数据管理
删除已经废弃的目录检查插件
优化 模板引擎解析,避免屡次实例化模板解析类并简化模板解析类的写法,去掉架构方法定义
修改mobile验证的正则
增长了 分页类关于负数的判断
部分CX标签的属性能够支持特殊模板变量
F方法生成的文件会自动加上THINK_PATH判断,避免直接执行
取消了当指定模块和操做不存在的时候执行默认模块和默认操做,由用户本身定义空模块和空操做来处理。
增长了连贯操做的data方法,用于指定要操做的数据
去掉了已经废弃的三个配置参数:DB_CACHE_ON DB_CACHE_TIME DB_CACHE_MAX
增长表单提交的MAGIC_QUOTES_GPC判断
model类的query和execute方法支持使用__TABLE__字符串系统会自动替换成当前模型对应的表名
调整了空操做和直接判断模板文件的顺序空操做优先执行
修正 Cookie类支持关闭浏览器就失效的状况设置COOKIE_EXPIRE为0或者 空字符串或者在使用的时候传递参数0 Cookie::set($name,$value,0);
项目编译缓存文件也加上是否去掉注释的开关
[1.0.3 版本] 2008-3-16
增长空模块支持 若是指定的模块不存在会首先定位是否存在Empty模块
增长核心编译文件的去除空白和注释的开关,在入口文件定义 STRIP_RUNTIME_SPACE 常量为false 能够关闭去除空白和注释
Action缓存由原来的userCache成员属性控制改成项目参数 ACTION_CACHE_ON 控制,便于动态控制
增长数据库字段缓存的开关 惯例配置增长DB_FIELDS_CACHE 用以设置数据库字段是否缓存,默认进行缓存
修正xcache和 sqlite缓存方式的读写次数记录
使用 视图模型的时候,若是主键是id,不须要再定义getPk方法
修正多语言和多模板的 cookie问题
入口文件免设置APP_NAME APP_PATH
完善 Cookie
修正模板检查的时候组件化的支持
模型类的查询操做支持连贯方法
去掉了一些废弃的惯例配置参数,包括:DATA_CACHE_ON 和 DATA_CACHE_MAX
惯例配置增长了DATA_CACHE_SUBDIR参数控制文件缓存方式是否自动使用子目录哈希缓存
在项目根目录不存在的状况下自动建立
完善对跨库查询的支持
目录自动建立支持写入安全文件
[ 1.0.2 ] 2008-2-21
Model类增长toArray方法
修正因Log类的改动致使Trace错误信息没法正常显示的问题
数据查询返回的数据集由ArrayObject对象改为数组
修正Model类的create方法在定义字段 映射的下面的bug
修正虚拟模型下面create方法的bug
Model类的facade方法增长数据表字段的检测
优化Image类的showAdvVerify方法
修正标签库的compare标签
Trace配置文件由原来的_trace.php改名为trace.php
项目调试配置文件由原来的_debug.php改名为debug.php
项目配置文件由原来的_config.php改名为config.php
路由 定义文件由原来的_routes.php 改名为 routes.php
静态定义文件由原来的_htmls.php 改名为 htmls.php
Model类的create方法无需type参数,自动判断新增和编辑模型数据
增长第一次运行目录自动生成功能(只须要定义入口文件)
默认项目编译缓存目录为Temp目录
[ 1.0.1 ] 2008-2-2
修正Db类在Oracle下面的parseLimit方法判断
优化数据库驱动类的查询结果获取
Model 类增长字段的表达式插入和更新支持
完善了Db类的条件查询字段中带有空格的处理
Model类增长了delConnect方法用于删除动态增长的数据库链接
加强了 分布式数据库的支持 能够设置是否须要读写分离
Model类增长智能切换功能 switchConnect方法能够自动识别是不是相同的数据库链接类型
增长了组件模块的URL分割定义配置 COMPONENT_DEPR 包括对操做链的设置采用相同的参数定义
修正Model类的count等统计方法会自动缓存的问题 DB类默认关闭查询缓存
修正RBAC组件的权限判断
修正组件模块方式下面的模板文件../Public的替换
修正Html 标签库list标签的actionlist属性的支持
修正PDO类在某些数据库下面的getAll方法的BUG
增长核心缓存文件的开关功能 在入口文件里面设置 CACHE_RUNTIME 为 false
修正了使用组件模块的时候模板文件中__URL__的解析问题
修正模板和语言的切换 cookie
Model类增长addConnect和switchConnect方法 用于支持多数据库的链接
修正了语言包的缓存致使切换语言无效的问题
Db类增长多数据库链接的内置支持
修正Model类在某些数据库下面where条件表达式不支持where 1 的状况
Db类增长getLastSql方法用于获取最后一次查询的sql语句
完善Log类的操做以及优化错误日志的写入
修正model的数据库链接配置读取
ajax返回以前保存日志记录
完善compare标签
改进Vendor函数的baseUrl参数定义
改进项目语言包的定义 不一样语言分红不一样子目录
简化了query方法的数据库缓存
增长clearCache方法,用于清空项目相关缓存目录
增长 firebird数据库驱动支持
修正 pgsql驱动
修正 app.php 文件的编译缓存路径的问题
增长编译缓存路径的设置 RUNTIME_PATH
[ 1.0.0 ] 2007-12-25
优化了执行效率和内存开销
Import方法增长同名检测和类检测
完善PHP 5.2.0如下版本的支持
去掉了核心对Config、Language、 CookieSession类库的依赖
去掉了Action类内置的默认操做
改进了MySqli的驱动类库
修正了主键不是自动增加的时候Model的add方法返回错误
修正了 mysqli的escape_string方法
修正了PDO的链接params参数问题
修正了Model的findAll的关联查询问题
修正了Model类的getModelName方法问题
修正了RBAC的模块大小写设置
去掉volist resultset标签,均做为iterate标签的别名
增长了项目编译机制和核心类库编译机制
标签库定义增长标签的别名定义
XML模版结束标签增长对空格的支持
增长compare标签和eq neq gt egt lt elt heq 和nheq标签别名
增长了多模版和多语言的开关
RBAC认证增长了操做的认证设置,以前只支持模块的认证设置

相关开源项目

编辑
  1. ThinkSNS 基于许多优秀的开源软件开发,提供全方位的社交网络(SNS)解决方案。ThinkSNS源于办公圈项目,WEB端基于国内技术领先的ThinkPHP框架开发,另外还有IM客户端软件。ThinkSNS所有基于开源项目,同时也做为开源项目,免费提供给用户使用。项目框架都有完善的文档和实例,很是适合二次开发。能为致力于SNS方向的站长提供帮助,是咱们的最大的梦想![6]  
  2. OneThink
    OT是ThinkPHP官方发布的内容管理框架;OneThink以其便捷的建站、丰富的扩展、灵活的二次开发,以及云服务的支持,为广大我的和企业建站带来新的契机和机遇,即将成为互联网新的弄潮儿。[7]  
  3. ThinkCMF是由第三方团队开发的中文内容管理框架;ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架。ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者能够根据自身的需求以应用的形式进行扩展。每一个应用都能独立的完成本身的任务,也可经过系统调用其余应用进行协同工做。在这种运行机制下,开发商场应用的用户无需关心开发SNS应用时如何工做的,但他们之间又可经过系统自己进行协调,大大的下降了开发成本和沟通成本。普通的CMS(内容管理系统)通常不能完成全部的需求,而由于CMS在ThinkCMF内部只是已一个应用的形式存在,因此使用ThinkCMF你能够用CMS来管理你的内容,用电影网站系统来管理视频,用电商系统来管理电商网站。这些程序不会影响,你能够模块化的增长或减小应用。[8]  

在线手册目录

编辑

1简介

ThinkPHP是一个免费开源的,快速、简单的 面向对象的轻量级PHP开发框架,引入了全新的CBD(核心+行为+驱动)架构模式,同时支持SAE、REST和Mongo

2入门基础

2.1基础概念
2.2获取ThinkPHP
2.3关于版本
2.4环境要求
2.5许可协议

3架构设计

3.1系统特性
3.2目录结构
3.3MVC分层
3.4执行流程
3.5命名规范
3.6入口文件
3.7项目编译
3.8URL访问
3.9控制器
3.10模型
3.12 视图
3.14函数库
3.15类库
3.16扩展

4构建应用

4.1开发流程
4.2入口文件
4.3自动生成
4.4项目配置
4.5业务逻辑
4.6模板定义
4.7运行应用

5开发指南

5.1配置
5.2控制器
5.3模型
5.4 视图
5.5错误和日志
5.6调试
5.7缓存
5.8安全
5.9部署
5.10杂项

6扩展指南

6.1类库扩展
6.2应用扩展
6.3控制器扩展
6.4模型扩展
6.5驱动扩展
6.6Widget扩展
6.7行为扩展
6.8 标签库扩展
6.9 模板引擎扩展
6.10模式扩展

7模板指南

7.1变量输出
7.2使用函数
7.3系统变量
7.4快捷输出
7.5默认值输出
7.6包含文件
7.7导入文件
7.8Vo list标签
7.9Foreach标签
7.10Switch标签
7.11比较标签
7.12Range标签
7.13Present标签
7.14Empty标签
7.15Defined标签
7.16IF标签
7.17标签嵌套
7.18使用PHP代码
7.19原样输出
7.20模板注释
7.21引入标签库
7.22修改定界符

8附录

8.1常量参考
8.2配置参考
8.3函数参考
8.4类库参考
8.5关于升级
8.7开源应用
8.8典型案例
8.9大事记
8.10鸣谢

所获荣誉

编辑
2012年度最受欢迎中国开源软件第二名[9]  
相关文章
相关标签/搜索