thinkphp 官网教程:https://sites.thinkphp.cn/1556331
1、thinkphp 各个版本区别
ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,目前 thinkphp 总共给出 4 个官方手册:
- ThinkPHP 3.2.3
- ThinkPHP 5.0:一个颠覆和重构版本,采用全新的架构思想,引入了更多的PHP新特性,优化了核心,减少了依赖,实现了真正的惰性加载,支持composer,并针对API开发做了大量的优化,包括路由、日志、异常、模型、数据库、模板引擎和验证等模块都已经重构,不适合原有3.2项目的升级,请慎重考虑商业项目升级,但绝对是新项目的首选(无论是WEB还是API开发)。目前最新版本为V5.0.24。V5.0版本目前进入BUG及安全维护阶段,不再进行功能升级!(BUG修正截止时间为2019年1月1日 安全更新截止间2020年1月1日)
- ThinkPHP 5.1:在5.0的基础上对底层架构做了进一步的改进,引入新特性,并提升版本要求。ThinkPHP5.1 运行环境要求 PHP5.6+。不支持5.0的无缝升级,5.1.*版本基本上可以支持无缝升级。
- ThinkPHP 6.0:基于精简核心和统一用法两大原则在5.1的基础上对底层架构做了进一步的优化改进,并更加规范化。由于引入了一些新特性,ThinkPHP6.0运行环境要求PHP7.1+,不支持5.1的无缝升级。
2、thinkphp 快速入门
ThinkPHP 官方入门系列教程:https://www.kancloud.cn/special/thinkphp5_quickstart
3、ThinkPHP V5.0 完全开发手册
不能替代教程,而是作为工具参考,学习的话新手建议先阅读官方的 《 5.0入门系列教程
ThinkPHP V5.0 完全开发手册:https://www.kancloud.cn/manual/thinkphp5/118003
4、安装
5.1 版本开始 ( 包括 5.1 ),官网不再提供下载版本,使用 Composer 或者 git 方式安装和更新。
方法 1:官网下载安装 ( 只支持 5.0 以前的版本 )
获取 ThinkPHP 的方式很多,官方网站(http://thinkphp.cn)提供了稳定版本或者带扩展完整版本的下载。
官网的下载版本不一定是最新版本,git 版本获取的才是保持更新的版本。
thinkPHP 5.0 拆分为多个仓库,主要包括:
- 应用项目:
https://github.com/top-think/think
- 核心框架:
https://github.com/top-think/framework
方法 2:Composer 安装
thinkphp 5.1 安装:https://www.kancloud.cn/manual/thinkphp5_1/353948
thinkphp 6.0 安装:https://www.kancloud.cn/manual/thinkphp6_0/1037481
方法 3:通过 git 安装
ThinkPHP 5.1 通过 git 安装步骤:https://www.kancloud.cn/manual/thinkphp5_1/353948
ThinkPHP5.1
主要分为应用和核心两个仓库,主要包括:
- 应用项目:https://github.com/top-think/think
- 核心框架:https://github.com/top-think/framework
6.0 版本开始,必须通过 Composer 方式安装和更新,无法通过 Git 下载安装。
验证是否成功
无论采用什么方式获取的 ThinkPHP 框架,现在只需要做最后一步来验证是否正常运行。
我本地 网站根目录
在浏览器中输入地址:http://127.0.0.1/thinkphp_5_0_24_with_extend/public/index.php
浏览器显示如图,说明已经完成 ThinkPHP5 的安装!( 其实就是放到网站的根目录下 )
5、开发规范、目录结构
开发规范
ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:
目录和文件
- 目录使用小写+下划线;
- 类库、函数文件统一以
.php
为后缀; - 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
- 类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;
- 类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);
函数和类、属性命名
- 类的命名采用驼峰法(首字母大写),例如
User
、UserType
,默认不需要添加后缀,例如UserController
应该直接命名为User
; - 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如
get_client_ip
; - 方法的命名使用驼峰法(首字母小写),例如
getUserName
; - 属性的命名使用驼峰法(首字母小写),例如
tableName
、instance
; - 以双下划线“__”打头的函数或方法作为魔术方法,例如
__call
和__autoload
;
常量和配置
- 常量以大写字母和下划线命名,例如
APP_PATH
和THINK_PATH
; - 配置参数以小写字母和下划线命名,例如
url_route_on
和url_convert
;
数据表和字段
- 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如
think_user
表和user_name
字段,不建议使用驼峰和中文作为数据表字段命名。
应用类库命名空间规范
应用类库的根命名空间统一为app(不建议更改,可以设置app_namespace
配置参数更改,V5.0.8
版本开始使用APP_NAMESPACE
常量定义);
例如:app\index\controller\Index
和app\index\model\User
。
请避免使用PHP保留字(保留字列表参见 PHP: 关键词列表 - Manual )作为常量、类名和方法名,以及命名空间的命名,否则会造成系统错误。
目录结构
下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下:
project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
│ ├─static 静态资源存放目录(css,js,image)
│ ├─index.php 应用入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于 apache 的重写
├─runtime 应用的运行时目录(可写,可设置)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架系统目录
│ ├─lang 语言包目录
│ ├─library 框架核心类库目录
│ │ ├─think Think 类库包目录
│ │ └─traits 系统 Traits 目录
│ ├─tpl 系统模板目录
│ ├─.htaccess 用于 apache 的重写
│ ├─.travis.yml CI 定义文件
│ ├─base.php 基础定义文件
│ ├─composer.json composer 定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 惯例配置文件
│ ├─helper.php 助手函数文件(可选)
│ ├─LICENSE.txt 授权说明文件
│ ├─phpunit.xml 单元测试配置文件
│ ├─README.md README 文件
│ └─start.php 框架引导文件
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
如果是mac或者linux环境,请确保
runtime
目录有可写权限
5.0的部署建议是public
目录作为web目录访问内容,其它都是web目录之外,当然,你必须要修改public/index.php
中的相关路径。如果没法做到这点,请记得设置目录的访问权限或者添加目录列表的保护文件。
router.php用于php自带webserver支持,可用于快速测试
启动命令:php -S localhost:8888 router.php
5.0版本自带了一个完整的应用目录结构和默认的应用入口文件,开发人员可以在这个基础之上灵活调整。
上面的目录结构和名称是可以改变的,尤其是应用的目录结构,这取决于你的入口文件和配置参数。
由于ThinkPHP5.0的架构设计对模块的目录结构保留了很多的灵活性,尤其是对于用于存储的目录具有高度的定制化,因此上述的目录结构仅供建议参考。
架构
架构总览
生命周期
入口文件
URL访问
模块设计
命名空间
自动加载
Traits引入
API友好
配置
ThinkPHP提供了灵活的全局配置功能,采用最有效率的PHP返回数组方式定义,支持惯例配置、公共配置、模块配置、扩展配置、场景配置、环境变量配置和动态配置。
对于有些简单的应用,你无需配置任何配置文件,而对于复杂的要求,你还可以扩展自己的独立配置文件。
系统的配置参数是通过静态变量全局存取的,存取方式简单高效。
配置功能由\think\Config
类完成。
- 配置
配置目录
配置格式
配置加载
读取配置
动态配置
独立配置
配置作用域
环境变量配置
路由
路由功能由\think\Route
类完成。
概述
由于ThinkPHP5.0
默认采用的URL规则是:
路由的作用是简化URL访问地址,并根据定义的路由类型做出正确的解析。
新版的路由功能做了大量的增强,包括:
- 支持路由到模块的控制器/操作、控制器类的方法、闭包函数和重定向地址,甚至是任何类库的方法;
- 闭包路由的增强;
- 规则路由支持全局和局部变量规则定义(正则);
- 支持路由到任意层次的控制器;
- 子域名路由功能改进;
- 支持路由分组并支持分组参数定义;
- 增加资源路由和嵌套支持;
- 支持使用行为或者自定义函数检测路由规则;
ThinkPHP5.0的路由支持三种方式的URL解析规则。
5.0的路由是针对应用而不是针对模块,因此路由的设置也是针对应用下面的所有模块,如果希望不同的模块区分不同的设置(例如某些模块需要关闭路由,某些模块需要强制路由等),需要给该模块增加单独的入口文件,并作如下修改:
// 定义项目路径
define('APP_PATH', __DIR__ . '/../application/');
// 加载框架基础文件
require __DIR__ . '/../thinkphp/base.php';
// 绑定当前入口文件到admin模块
\think\Route::bind('admin');
// 关闭admin模块的路由
\think\App::route(false);
// 执行应用
\think\App::run()->send();
V5.0.21+
版本开始,支持了路由解析缓存。
在配置文件中 设置开启
// 开启路由解析缓存
'route_check_cache' => true,
- 路由
- 路由模式
- 路由定义
- 批量注册
- 变量规则
- 组合变量
- 路由参数
- 路由地址
- 资源路由
- 快捷路由
- 路由别名
- 路由分组
- MISS路由
- 闭包支持
- 路由绑定
- 绑定模型
- 域名路由
- URL生成
路由模式
路由定义
批量注册
变量规则
组合变量
路由参数
路由地址
资源路由
快捷路由
路由别名
路由分组
MISS路由
闭包支持
路由绑定
绑定模型
域名路由
URL生成
控制器
控制器定义控制器初始化前置操作跳转和重定向空操作空控制器多级控制器分层控制器Rest控制器自动定位控制器资源控制器
控制器定义
控制器初始化
前置操作
跳转和重定向
空操作
空控制器
多级控制器
分层控制器
Rest控制器
自动定位控制器
资源控制器
请求
请求信息输入变量更改变量请求类型请求伪装HTTP头信息伪静态方法注入属性注入参数绑定依赖注入请求缓存
请求信息
输入变量
更改变量
请求类型
请求伪装
HTTP头信息
伪静态
方法注入
属性注入
参数绑定
依赖注入
请求缓存
数据库
新版的数据库进行了重构,主要特性包括:
- 类拆分为Connection(连接器)/Query(查询器)/Builder(SQL生成器)
- 新的查询语法
- 闭包查询和闭包事务
- Query对象查询
- 链式操作
- 数据分批处理
- 数据库SQL执行监听
- 数据库
连接数据库
基本使用
查询构造器
查询事件
事务操作
监听SQL
存储过程
数据集
分布式数据库
模型
新版的模型进行了重构,更加对象化操作,包括关联模型的重构,主要特性包括:
- 完全对象式访问
- 支持静态调用(查询)
- 支持读取器/修改器
- 时间戳字段自动写入
- 对象/数组访问
- JSON序列化
- 模型事件触发
- 命名范围
- 类型自动转换
- 数据验证和自动完成
- 关联查询/操作
- 关联预载入
- 模型
- 定义
- 模型初始化
- 新增
- 更新
- 删除
- 查询
- 聚合
- 获取器
- 修改器
- 时间戳
- 只读字段
- 软删除
- 类型转换
- 数据完成
- 查询范围
- 模型分层
- 数组访问和转换
- JSON序列化
- 事件
- 关联
- 聚合模型
视图
视图实例化模板引擎模板赋值模板渲染输出替换
视图实例化
模板引擎
模板赋值
模板渲染
输出替换
模板
主要讲述了如何使用内置的模板引擎来定义模板文件,以及使用加载文件、模板布局和模板继承等高级功能。
ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库。其特点包括:
- 支持XML标签库和普通标签的混合定义;
- 支持直接使用PHP代码书写;
- 支持文件包含;
- 支持多级标签嵌套;
- 支持布局模板功能;
- 一次编译多次运行,编译和运行效率非常高;
- 模板文件和布局模板更新,自动更新模板缓存;
- 系统变量无需赋值直接输出;
- 支持多维数组的快速输出;
- 支持模板变量的默认值;
- 支持页面代码去除Html空白;
- 支持变量组合调节器和格式化功能;
- 允许定义模板禁用函数和禁用PHP语法;
- 通过标签库方式扩展。
每个模板文件在执行过程中都会生成一个编译后的缓存文件,其实就是一个可以运行的PHP文件。
内置的模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的:
标签类型 | 描述 |
普通标签 | 主要用于输出变量和做一些基本的操作 |
XML标签 | 主要完成一些逻辑判断、控制和循环输出,并且可扩展 |
这种方式的结合保证了模板引擎的简洁和强大的有效融合。
- 模板
- 模板定位
- 模板标签
- 变量输出
- 系统变量
- 请求参数
- 使用函数
- 使用默认值
- 使用运算符
- 三元运算
- 原样输出
- 模板注释
- 模板布局
- 模板继承
- 包含文件
- 标签库
- 内置标签
日志
- 日志
错误和调试
调试模式异常处理抛出异常Trace调试变量调试性能调试SQL调试远程调试404页面
调试模式
异常处理
抛出异常
Trace调试
变量调试
性能调试
SQL调试
远程调试
404页面
验证
验证器验证规则错误信息验证场景控制器验证模型验证内置规则静态调用表单令牌
验证器
验证规则
错误信息
验证场景
控制器验证
模型验证
内置规则
静态调用
表单令牌
安全
输入安全数据库安全上传安全其它安全建议
输入安全
数据库安全
上传安全
其它安全建议
杂项
- 杂项
缓存
Session
Cookie
多语言
分页
上传
验证码
图像处理
文件处理
单元测试
扩展
函数类库行为驱动Composer包SAE标签扩展
函数
类库
行为
驱动
Composer包
SAE
标签扩展
命令行
ThinkPHP5.0支持Console
应用,通过命令行的方式执行一些URL访问不方便或者安全性较高的操作。
我们可以在命令行下面,切换到应用根目录,然后执行php think
,会出现下面的提示信息:
>php think
Think Console version 0.1
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-V, --version Display this console version
-q, --quiet Do not output any message
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands:
build Build Application Dirs
clear Clear runtime file
help Displays help for a command
list Lists commands
make
make:controller Create a new resource controller class
make:model Create a new model class
optimize
optimize:autoload Optimizes PSR0 and PSR4 packages to be loaded with classmaps too, good for production.
optimize:config Build config and common file cache.
optimize:route Build route cache.
console
命令的执行格式一般为:
>php think 指令 参数
下面介绍下系统自带的几个命令,包括:
指令 | 描述 |
build | 自动生成目录和文件 |
help | 帮助 |
list | 指令列表 |
clear | 清除缓存指令 |
make:controller | 创建控制器文件 |
make:model | 创建模型文件 |
optimize:autoload | 生成类库映射文件 |
optimize:config | 生成配置缓存文件 |
optimize:route | 生成路由缓存文件 |
optimize:schema | 生成数据表字段缓存文件 |
更多的指令可以自己扩展。
- 命令行
自动生成目录结构
创建类库文件
生成类库映射文件
生成路由缓存
清除缓存文件
生成配置缓存文件
生成数据表字段缓存
自定义命令行
部署
虚拟主机环境Linux 主机环境URL重写
虚拟主机环境
Linux 主机环境
URL重写
附录
配置参考常量参考助手函数升级指导更新日志
配置参考
常量参考
助手函数
升级指导
更新日志