thinkphp 官网教程

thinkphp 官网教程:https://sites.thinkphp.cn/1556331

1、thinkphp 各个版本区别

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,目前 thinkphp 总共给出 4 个官方手册: 

thinkphp 官网教程_第1张图片

  • ThinkPHP 3.2.3 :只支持 PHP5.3 以前的版本( 注意:PHP5.3dev版本和PHP6均不支持 )
  • 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 快速入门

MVC ( Model、View、Controller ) 的关系

thinkphp 官网教程_第2张图片

  • 模型(Model):用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。“ Model ”有对数据直接访问的权力,例如对数据库的访问。“Model”不依赖“View”和“Controller”,也就是说, Model 不关心它会被如何显示或是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必须事先在此 Model 上注册,从而,View 可以了解在数据 Model 上发生的改变。
  • 视图(View):展示给用户,进行交互,通常视图是依据模型的数据创建的。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
  • 控制器(Controller):起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。( 负责从视图读取一些数据,在控制用户输入,并向模型发送数据,假如有什么数据要展示给用户看,也是用控制器展示的,也是在模型和视图之间作为中间的一个控制,用来管理整个数据流动, )

thinkphp 官网教程_第3张图片

thinkphp 官网教程_第4张图片

执行过程

  • 1.  浏览者 ->  调用控制器,发出指令
  • 2.  控制器 ->  按指令选择合适的模型
  • 3.  模型    ->  按指令取数据
  • 4.  控制器 ->  按指令选视图
  • 5 . 视图    ->  把取到的数据展示出来

动态图演示:

一个典型的 Web MVC 流程:

  1. Controller 截获用户发出的请求;
  2. Controller 调用 Model 完成状态的读写操作;
  3. Controller 把数据传递给 View;
  4. View 渲染最终结果并呈献给用户。

示例:手把手编写PHP MVC框架实例教程--FastPHP

:https://www.jianshu.com/p/0635f0c7a5b6

thinkphp 架构 执行 流程

thinkphp 官网教程_第5张图片

ThinkPHP 官方入门系列教程

:https://www.kancloud.cn/special/thinkphp5_quickstart

thinkphp 官网教程_第6张图片

3、ThinkPHP V5.0 完全开发手册

不能替代教程,而是作为工具参考,学习的话新手建议先阅读官方的 《 5.0入门系列教程 》

ThinkPHP V5.0 完全开发手册:https://www.kancloud.cn/manual/thinkphp5/118003

thinkphp 官网教程_第7张图片

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 框架,现在只需要做最后一步来验证是否正常运行。

我本地 网站根目录

thinkphp 官网教程_第8张图片

在浏览器中输入地址:http://127.0.0.1/thinkphp_5_0_24_with_extend/public/index.php

thinkphp 官网教程_第9张图片

浏览器显示如图,说明已经完成 ThinkPHP5 的安装!( 其实就是放到网站的根目录下 )

5、开发规范、目录结构

开发规范

ThinkPHP5遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:

目录和文件

  • 目录使用小写+下划线;
  • 类库、函数文件统一以.php为后缀;
  • 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
  • 类文件采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名;
  • 类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);

函数和类、属性命名

  • 类的命名采用驼峰法(首字母大写),例如 UserUserType,默认不需要添加后缀,例如UserController应该直接命名为User
  • 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip
  • 方法的命名使用驼峰法(首字母小写),例如 getUserName
  • 属性的命名使用驼峰法(首字母小写),例如 tableNameinstance
  • 以双下划线“__”打头的函数或方法作为魔术方法,例如 __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\Indexapp\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友好

​架构总览

生命周期

入口文件

URL访问

模块设计

命名空间

自动加载

Traits引入

API友好

配置

ThinkPHP提供了灵活的全局配置功能,采用最有效率的PHP返回数组方式定义,支持惯例配置、公共配置、模块配置、扩展配置、场景配置、环境变量配置和动态配置。

对于有些简单的应用,你无需配置任何配置文件,而对于复杂的要求,你还可以扩展自己的独立配置文件。

系统的配置参数是通过静态变量全局存取的,存取方式简单高效。

配置功能由\think\Config类完成。

  • 配置
    • 配置目录
    • 配置格式
    • 配置加载
    • 读取配置
    • 动态配置
    • 独立配置
    • 配置作用域
    • 环境变量配置

​配置目录

配置格式

配置加载

读取配置

动态配置

独立配置

配置作用域

环境变量配置

路由

路由功能由\think\Route类完成。

概述

由于ThinkPHP5.0默认采用的URL规则是:

http://server/module/controller/action/param/value/...

路由的作用是简化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
    • 存储过程
    • 数据集
    • 分布式数据库

连接数据库

基本使用

查询构造器

查询事件

事务操作

监听SQL

存储过程

数据集

分布式数据库

模型

新版的模型进行了重构,更加对象化操作,包括关联模型的重构,主要特性包括:

  • 完全对象式访问
  • 支持静态调用(查询)
  • 支持读取器/修改器
  • 时间戳字段自动写入
  • 对象/数组访问
  • JSON序列化
  • 模型事件触发
  • 命名范围
  • 类型自动转换
  • 数据验证和自动完成
  • 关联查询/操作
  • 关联预载入

  • 模型
    • 定义
    • 模型初始化
    • 新增
    • 更新
    • 删除
    • 查询
    • 聚合
    • 获取器
    • 修改器
    • 时间戳
    • 只读字段
    • 软删除
    • 类型转换
    • 数据完成
    • 查询范围
    • 模型分层
    • 数组访问和转换
    • JSON序列化
    • 事件
    • 关联
      • 一对一关联
      • 一对多关联
      • 远程一对多
      • 多对多关联
      • 多态关联
      • 动态属性
      • 关联预载入
      • 关联统计
    • 聚合模型

视图

视图实例化
模板引擎
模板赋值
模板渲染
输出替换

视图实例化

模板引擎

模板赋值

模板渲染

输出替换

模板

主要讲述了如何使用内置的模板引擎来定义模板文件,以及使用加载文件、模板布局和模板继承等高级功能。

ThinkPHP内置了一个基于XML的性能卓越的模板引擎,这是一个专门为ThinkPHP服务的内置模板引擎,使用了XML标签库技术的编译型模板引擎,支持两种类型的模板标签,使用了动态编译和缓存技术,而且支持自定义标签库。其特点包括:

  • 支持XML标签库和普通标签的混合定义;
  • 支持直接使用PHP代码书写;
  • 支持文件包含;
  • 支持多级标签嵌套;
  • 支持布局模板功能;
  • 一次编译多次运行,编译和运行效率非常高;
  • 模板文件和布局模板更新,自动更新模板缓存;
  • 系统变量无需赋值直接输出;
  • 支持多维数组的快速输出;
  • 支持模板变量的默认值;
  • 支持页面代码去除Html空白;
  • 支持变量组合调节器和格式化功能;
  • 允许定义模板禁用函数和禁用PHP语法;
  • 通过标签库方式扩展。

每个模板文件在执行过程中都会生成一个编译后的缓存文件,其实就是一个可以运行的PHP文件。

内置的模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的:

标签类型 描述
普通标签 主要用于输出变量和做一些基本的操作
XML标签 主要完成一些逻辑判断、控制和循环输出,并且可扩展

这种方式的结合保证了模板引擎的简洁和强大的有效融合。

  • 模板
    • 模板定位
    • 模板标签
    • 变量输出
    • 系统变量
    • 请求参数
    • 使用函数
    • 使用默认值
    • 使用运算符
    • 三元运算
    • 原样输出
    • 模板注释
    • 模板布局
    • 模板继承
    • 包含文件
    • 标签库
    • 内置标签
      • 循环输出标签
      • 比较标签
      • 条件判断
      • 资源文件加载
      • 标签嵌套
      • 原生PHP
      • 定义标签

日志

  • 日志
    • 介绍
    • 日志驱动
    • 日志写入
    • 独立日志
    • 日志清空
    • 写入授权

错误和调试

调试模式
异常处理
抛出异常
Trace调试
变量调试
性能调试
SQL调试
远程调试
404页面

调试模式

异常处理

抛出异常

Trace调试

变量调试

性能调试

SQL调试

远程调试

404页面

验证

验证器
验证规则
错误信息
验证场景
控制器验证
模型验证
内置规则
静态调用
表单令牌

验证器

验证规则

错误信息

验证场景

控制器验证

模型验证

内置规则

静态调用

表单令牌

安全

输入安全
数据库安全
上传安全
其它安全建议

输入安全

数据库安全

上传安全

其它安全建议

杂项

  • 杂项
    • 缓存
    • Session
    • Cookie
    • 多语言
    • 分页
    • 上传
    • 验证码
    • 图像处理
    • 文件处理
    • 单元测试

缓存

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重写

附录

配置参考
常量参考
助手函数
升级指导
更新日志

配置参考

常量参考

助手函数

升级指导

更新日志

你可能感兴趣的