ThinkPHP 完全开发手册
版本号 V3.2.2
2014/04/14
上海顶想信息科技有限公司 版权所有
序言
手册阅读须知:本手册仅针对ThinkPHP3.2.*版本,3.1版本的请 参考这里 请使用左右键( <-- 和和
--> )翻页阅读, CTRL+ALT+F 全屏阅读。
版权申明
发布本资料须遵守开放出版许可协议 1.0 或者更新版本。
未经版权所有者明确授权,禁止发行本文档及其被实质上修改的版本。
未经版权所有者事先授权,禁止将此作品及其衍生作品以标准(纸质)书籍形式发行。
如果有兴趣再发行或再版本手册的全部或部分内容,不论修改过与否,或者有任何问题,请联系版权所有
者 liu21st@gmail.com。
对ThinkPHP有任何疑问或者建议,请进入官方讨论区 [ http://www.thinkphp.cn/topic ] 发布相关讨
论。
有关ThinkPHP项目及本文档的最新资料,请及时访问ThinkPHP项目主站 http://www.thinkphp.cn。
本文档的版权归ThinkPHP文档小组所有,本文档及其描述的内容受有关法律的版权保护,对本文档内容
的任何形式的非法复制,泄露或散布,将导致相应的法律责任。
捐赠我们
ThinkPHP一直在致力于简化企业和个人的WEB应用开发,您的帮助是对我们最大的支持和动力!
我们的团队8年来一直在坚持不懈地努力,并坚持开源和免费提供使用,帮助开发人员更加方便的进行
WEB应用的快速开发,如果您对我们的成果表示认同并且觉得对你有所帮助我们愿意接受来自各方面的捐
赠^_^。
官方微博
- 2 -
基础
ThinkPHP是一个快速、简单的基于MVC和面向对象的轻量级PHP开发框架,遵循Apache2开源协议发
布,从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,尤其注重开发体
验和易用性,并且拥有众多的原创功能和特性,为WEB应用开发提供了强有力的支持。
3.2版本则在原来的基础上进行一些架构的调整,引入了命名空间支持和模块化的完善,为大型应用和模
块化开发提供了更多的便利。
[2014/04/15] 3.2.2 主要更新:
应用支持包括PHP/JSON/INI/XML/YAML以及自定义格式的配置文件;
支持模块的自动生成;
增加插件控制器的访问支持;
cookie函数增加httponly参数支持;
改进模型类的安全处理;
修正了3.2.1发布以来社区反馈的一些BUG;
[2014/02/14] 3.2.1 主要更新:
性能较3.2.0版本提升30%;
模块类库可以配置不使用命名空间;
支持运行时Lite文件生成,用于替换应用入口文件;
改进路由定义的闭包支持;
增加API应用模式,更加高效;
增加REST、RPC、HPROSE和YAR控制器扩展支持;
增加REPL行为扩展,增强框架开发的调试手段;
重写查询缓存功能;
语言定义支持变量传入;
C函数获取配置参数支持默认值;
支持操作方法绑定到类;
改进和修正Image、Verify和Upload类;
修正了3.2.0发布以来社区反馈的一些BUG;
[2013/12/18] 3.2.0 主要更新:
多模块的支持完善(原来的独立分组已经改为模块);
- 3 -
命名空间及新的自动加载机制;
全新的应用模式;
更完善的Action参数绑定;
PDO参数绑定完善;
更方便的云平台支持,包括SAE和BAE;
路由功能的增强及闭包支持 ;
子域名及泛域名部署的完善 ;
完全重写的部分工具类库(包括验证码、图像处理、权限处理、文件上传等)。
获取ThinkPHP
获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源。
官网提供了稳定版本的下载:http://thinkphp.cn/down/framework.html
如果你希望保持最新的更新,可以通过github获取当前最新的版本更新。
Git获取地址列表(你可以选择一个最快的地址):
Github: https://github.com/liu21st/thinkphp
Oschina: http://git.oschina.net/liu21st/thinkphp.git
Code: https://code.csdn.net/topthink2011/ThinkPHP
ThinkPHP无需任何安装,直接拷贝到你的电脑或者服务器的WEB运行目录下面即可。
环境要求
框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。ThinkPHP底层运
行的内存消耗极低,而本身的文件大小也是轻量级的,因此不会出现空间和内存占用的瓶颈。
支持的服务器和数据库环境
支持Windows/Unix服务器环境
可运行于包括Apache、IIS和nginx在内的多种WEB服务器和模式
支持Mysql、MsSQL、PgSQL、Sqlite、Oracle、Ibase、Mongo以及PDO等多种数据库和连接
PHP版本要求
PHP5.3以上版本(注意:PHP5.3dev版本和PHP6均不支持)
- 4 -
对于刚刚接触PHP或者ThinkPHP的新手,我们推荐使用集成开发环
境WAMPServer(wampserver是一个集成了Apache、PHP和MySQL的开发套件,而且支持不同
PHP版本、MySQL版本和Apache版本的切换)来使用ThinkPHP进行本地开发和测试。
目录结构
下载3.2框架后,解压缩到web目录下面,可以看到初始的目录结构如下:
1. www WEB部署目录(或者子目录)
2. ├─index.php 入口文件
3. ├─README.md README文件
4. ├─Application 应用目录
5. ├─Public 资源文件目录
6. └─ThinkPHP 框架目录
3.2版本相比之前的版本自带了一个完整的应用目录结构和默认的应用入口文件,开发人员可以在这个基
础之上灵活调整。其中, Application 和 Public 目录下面都是空的。
README.md文件仅用于说明,实际部署的时候可以删除。
上面的目录结构和名称是可以改变的,这取决于你的入口文件和配置参数。
Application目录默认是空的,但是第一次访问入口文件会自动生成,参考后面的入口文件部分。
其中框架目录ThinkPHP的结构如下:
1. ├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
2. │ ├─Common 核心公共函数目录
3. │ ├─Conf 核心配置目录
4. │ ├─Lang 核心语言包目录
5. │ ├─Library 框架类库目录
6. │ │ ├─Think 核心Think类库包目录
7. │ │ ├─Behavior 行为类库目录
8. │ │ ├─Org Org类库包目录
9. │ │ ├─Vendor 第三方类库目录
10. │ │ ├─ ... 更多类库目录
11. │ ├─Mode 框架应用模式目录
12. │ ├─Tpl 系统模板目录
13. │ ├─LICENSE.txt 框架授权协议文件
- 5 -
14. │ ├─logo.png 框架LOGO文件
15. │ ├─README.txt 框架README文件
16. │ └─index.php 框架入口文件
上述应用的目录结构只是默认设置,事实上,在实际部署应用的时候,我们建议除了应用入口文件
和 Public 资源目录外,其他文件都放到非WEB目录下面,具有更好的安全性。
入口文件
ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个应用都有一个统一(但不一
定是唯一)的入口。
应该说,所有应用都是从入口文件开始的,并且不同应用的入口文件是类似的。
入口文件定义
入口文件主要完成:
定义框架路径、项目路径(可选)
定义调试模式和应用模式(可选)
定义系统相关常量(可选)
载入框架入口文件(必须)
默认情况下,3.2版本的框架已经自带了一个应用入口文件(以及默认的目录结构),内容如下:
1. define('APP_PATH','./Application/');
2. require './ThinkPHP/ThinkPHP.php';
注意:3.2版本开始无需定义APP_NAME常量
如果你改变了项目目录(例如把 Application 更改为 Apps ),只需要在入口文件更改APP_PATH常量
定义即可:
1. define('APP_PATH','./Apps/');
2. require './ThinkPHP/ThinkPHP.php';
注意:APP_PATH的定义支持相对路径和绝对路径,但必须以“/”结束
如果你调整了框架核心目录的位置或者目录名,只需要这样修改:
- 6 -
1. define('APP_PATH','./Application/');
2. require './Think/ThinkPHP.php';
也可以单独定义一个THINK_PATH常量用于引入:
1. define('APP_PATH','./Application/');
2. define('THINK_PATH',realpath('../Think').'/');
3. require THINK_PATH.'ThinkPHP.php';
和APP_PATH一样THINK_PATH路径定义也必须以“/”结尾。
给THINK_PATH和APP_PATH定义绝对路径会提高系统的加载效率。
入口文件中的其他定义
一般不建议在入口文件中做过多的操作,但可以重新定义一些系统常量,入口文件中支持定义(建议)的
一些系统常量包括:
常量
描述
THINK_PATH
框架目录
APP_PATH
应用目录
RUNTIME_PATH 应用运行时目录(可写)
APP_DEBUG
应用调试模式 (默认为false)
STORAGE_TYPE 存储类型(默认为File)
APP_MODE
应用模式(默认为common)
注意:所有路径常量都必须以“/”结尾
例如,我们可以在入口文件中重新定义相关目录并且开启调试模式:
1. // 定义应用目录
2. define('APP_PATH','./Apps/');
3. // 定义运行时目录
4. define('RUNTIME_PATH','./Runtime/');
5. // 开启调试模式
6. define('APP_DEBUG',True);
7. // 更名框架目录名称,并载入框架入口文件
- 7 -
8. require './Think/ThinkPHP.php';
这样最终的应用目录结构如下:
1. www WEB部署目录(或者子目录)
2. ├─index.php 应用入口文件
3. ├─Apps 应用目录
4. ├─Public 资源文件目录
5. ├─Runtime 运行时目录
6. └─Think 框架目录
入口文件中还可以定义一些系统变量,用于相关的绑定操作(通常用于多个入口的情况),这个会
在后面涉及,暂且不提。
自动生成
自动创建目录
在第一次访问应用入口文件的时候,会显示如图所示的默认的欢迎页面,并自动生成了一个默认的应用模
块Home。
接下来再看原来空的 Application 目录下面,已经自动生成了公共模块 Common 、默认的 Home 模块
和 Runtime 运行时目录的目录结构:
1. Application
2. ├─Common 应用公共模块
3. │ ├─Common 应用公共函数目录
4. │ └─Conf 应用公共配置文件目录
5. ├─Home 默认生成的Home模块
6. │ ├─Conf 模块配置文件目录
- 8 -