# 版本更新日志
[TOC=2,2]
## `V6.0.4`(2020年9月28日)
本次更新为常规更新,主要包含:
### 新增
* [新增] 多语言支持解析`json`文件
* [新增] 增加`app.url`配置 用于命令行下构建`request`
* [新增] 模型类增加`convertNameToCamel`属性,支持数据格式转为驼峰命名输出
* [新增] `Relation`类增加`getForeignKey`和`getLocalKey`方法
### 修正
* [修正] 修复规则为空的bug
* [修正] 修正请求缓存中间件
* [修正] 改进验证的`append`方法处理造成多次验证的情况
* [修正] 改进资源路由对路由到类的支持
* [修正] 修正重定向路由的传参
* [修正] 调整`http`初始化位置 防止容器绑定自身造成死循环
* [修正] 改进Redis驱动`select`参数处理
* [修正] 改进多对多关联查询
### 优化
* [优化] 优化`session `文件缓存 `path `获取
* [优化] 改进路由参数检测
* [优化] 改进路由参数获取和变量检查
* [优化] 路由的请求缓存可以通过`request_cache_key`配置参数关闭 便于开发模式
* [优化] 调整路由配置载入位置
* [优化] 改进路由缓存指令 取消`opis/closure`依赖
* [优化] 改进路由的额外参数检测
* [优化] 改进`Config`类的`has`方法判断
* [优化] 改进参数绑定对Null值的支持
* [优化] 改进`when`条件查询的闭包处理
* [优化] 改进一对一关联查询对`order`排序的支持
## `V6.0.3`(2020年6月25日)
本次更新包含一个调试模式的系统信息安全隐患修正,建议更新。
### 主要更新:
* 异常提取`session`数据时先判断是否使用了`session`
* 修正文件上传类
* 取消`Event`类`withEvent`方法
* `FileResponse`支持是否强制下载设置
* `Request`对象支持`ArrayAccess`接口
* 日志的时间记录增加微秒数据支持
* 调整 `Validate `场景执行优先级
* 优化App类`getDefaultRootPath`方法
* 修正全局中间件获取`param`参数的BUG
* clear命令支持多层级目录
* 修正日志记录时区问题
* 修复助手函数`public_path`
* 中间件支持多个参数
* 路由检测严格按照路由定义的顺序执行
* `FileResponse`增加是否强制下载文件选项
* 修复自定义命令别名比系统别名长导致报错问题
* 改进路由到视图的变量传递
* 允许路由到一个自定义调度类
* 完善路由单元测试
* 默认路由也支持自动`OPTIONS`请求
* 改进路由调度
* 改进host和port的获取支持代理
* `Request->port` 的返回类型转化
* 改进模型生成模板
* 简化默认异常页面信息显示
* 数据库支持设置缓存store
* 改进`optimize:schema`指令
* 为清理指令添加仅删除过期文件的选项
* 请求缓存增加预检缓存配置 默认有效期1800秒
* 支持`header`方式自动侦测多语言
## `V6.0.2`(2020年1月13日)
本次更新包含一个可能的`Session`安全隐患修正,建议更新。
### 主要更新:
* 改进设置方法后缀后的操作名获取问题
* 修正`optimize:schema`指令
* 修正`Request`类`inputData`处理
* 改进中间件方法支持传多个参数
* 修正`sessionid`检查的一处隐患
* 完善对15位身份证号码的校验
* 增加远程多对多关联支持
* 增加`MongoDb`的事务支持(`mongodb`版本V4.0+)
* 改进`insertAll`的`replace`支持
## `V6.0.1`(2019年12月24日)
### 主要更新:
* 完善`Request::withInput`
* 修正Content-Type获取途径
* 改进 SocketLog 驱动
* 修正 ClientArg 获取途径
* 修复FileResponse的cookie空对象异常
* 支持渲染完整的异常链信息
* 异常页面支持折叠调用堆栈信息
* 改进异常响应时内容的一致性
* 改进Error控制器对数字访问的支持
* 修正redirect助手函数
* memcached delete 支持 timeout
* 修正redis驱动
* 改进memcache驱动
* 改进容器类`invokeMethod`方法
* 使用新的数组语法替代list
* 缓存默认的序列化方法改为serialize/unserialize
* Add Cookie SameSite(PHP>7.3)
* 扩展`Socket`驱动
* 修正异常页面的模板文件
* 事件监听去重
* 取消视图日志
* 修正验证jpg结尾的图片报错问题
* 改进Url生成
* 改进Url生成伪静态后缀设置false的情况
* 改进File类型session读取`gzcompress`问题
* 修复使用路由验证后路由变量丢失的问题
* 修正多应用下路由目录路径
* 修复 `expand_level `选项异常
* 改进Cache类`remember`方法对依赖注入的支持
* 防止因日志配置异常时陷入死循环
* 模型支持动态设置数据库连接
* 修正`column`方法的查询缓存问题
* 改进Query类的`getAutoInc`方法
* 改进模型更新条件获取
* 修正使用模型对象更改数据时忽略自定义的`suffix `和 `connection`参数
* 修正XA事务
* 规范`column`方法的查询
## `V6.0.0`(2019年10月24日)
### 主要更新日志
* mobile 验证简化
* 控制器中间件支持传参
* 增强中间件CheckRequestCache的实用性
* 改进容器invokeClass方法异常处理
* 控制器中间件过滤条件支持字符串
* 改进Route类getDomainBind方法
* 防止路由标识生成URL时生成空字符串
* 让中间件CheckRequestCache只访问一次临界区
* 完善命中判断
* 修正Request::port返回类型
* 增强高并发下session_id生成的唯一性
* 取消路由缓存功能及相关指令
* 修正 Request::remotePort 返回类型
* 完善跨域中间件的响应头部
* 改进容器异常处理
* 改进生成文件模板
* 移除build指令纳入扩展
* 改进Response增加cookie方法用于设置Cookie
* 修正生成URL不传参数时,方法名为空
* 修复中间件CheckRequestCache使用过期数据
* 修复memcache驱动inc函数重复添加前缀问题
* 删除Resonse类setCookie方法
* 使用session_create_id生成id,保证唯一性
* 修复中间件FormTokenCheck无法启用问题
* 修正halt助手函数
## RC5(2019年10月13日)
`RC5`版本主要改进包括多应用模式独立,以及中间件机制调整。
### 主要新特性
* 多应用模式独立为扩展
* 中间件分组执行
* 增加路由配置文件的全局中间件定义
* 中间件支持优先级定义
* 中间件支持请求结束回调
* 中间件执行去重
* 模板根目录免配置自动识别
* 改进智能事件订阅
* 页面Trace独立为扩展
### 更新日志
* 修正request类isJson方法
* 提升swoole下多应用的性能
* 修正Cookie保存
* 改进字段缓存指令
* 修正路由正则生成
* 改进模板变量的全局赋值
* 改进filesystem
* 改进View 增加单元测试
* 修正php模板驱动
* 取消view_base配置,增加view_dir_name配置
* 完善Session及其单元测试
* 改进session助手函数支持获取所有数据
* 完善中间件及其单元测试
* 改进事件智能订阅
* 验证错误信息支持数组
* 改进多语言自动侦测
* 改进自动多语言
* 改进事件观察者支持事件前缀
* 去除Cache返回类型限制
* 多应用配置读取优先级调整
* 多应用路由改进
* 改进批量验证的错误信息返回
* 页面Trace中间件移除 改为扩展
* 改进session初始化中间件
* 修正默认URL访问
* 修正url生成对域名绑定的支持
* 改进中间件机制 全局、路由和控制器中间件分开
### 调整
* 获取当前应用名改为`app('http')->getName()`
## RC4(2019年8月16日)
`RC4`版本主要改进包括`ORM`库独立,日志系统增加多通道支持,缓存、日志、数据库的配置文件统一调整为多通道模式,并作了大量的改进和修正。
### 主要新特性
* 数据库和模型改为独立的`think-orm`库
* 模型关联功能增强
* 日志支持多通道、并统一命令行和WEB日志格式
* 增加`Filesystem`组件
* 增加容器对象实例化回调机制
* 路由注解独立为`think-annotation`库
* 多应用模式下路由定义支持纳入应用目录
### 功能改进
* 改进路由类的配置读取
* 改进`parseLike`查询
* 改进`ViewResponse`类增加内容渲染输出支持
* 增加`display`助手函数
* 验证类`maker`方法支持注入扩展验证规则
* 改进事件触发的对象传入
* 改进`Console/Table`类
* 改进关联定义对查询构造器的支持
* 关联类增加`withField`和`withLimit`方法,并取消`Query`类`withField`方法
* 增加延迟关联查询对`withLimit`的支持
* 改进模型`toArray`方法
* 改进Url生成的域名参数
* 改进 `make:command`指令生成
* 缓存有效期支持`DateInterval `
* 改进Query类find方法
* 改进`json`查询
* 改进查询缓存
* 增加`filesystem`组件
* 改进跨域请求
* 改进路由检测缓存配置
* 改进注解路由的文件写入
* 路由注册支持注册`options`请求类型
* 改进重定向路由检测
* 改进模型的`hasWhere`方法对闭包查询条件的支持完善
* 增加`time_query_rule`数据库配置参数 用于自定义时间查询规则
* 改进时间字段类型的自动识别
* 改进`redis`驱动
* 容器对象增加`invoke`回调机制
* 改进多对多关联
* 资源路由增加`withModel`和`withValidate `对各个路由设置不同的模型绑定和验证
* 改进`getLastInsID`方法
* 日志类调整 支持多通道写入
* 改进模型输出
* 支持单独关闭某个通道的日志写入
* 取消部署模式下 不写入调试日志的功能 用调试级别设置单独的日志渠道来替代
* 改进日志记录格式
* 支持日志输出格式化
* 改进资源路由
* 改进命令行日志实时写入
* 日志通道支持单独设置level配置参数
* Log类调整优化
* 增加`paginateX`查询用于大数据分页查询
* 数据集增加`first`和`last`方法
* 改进`response/View`类的`assign`方法
* 改进请求参数获取问题
* 改进`pathinfo`方法
* 增加一些路径助手函数
* 改进多级控制器访问
* Log类支持`__call`方法
* 多应用模式的路由定义支持放入单独的应用目录
* 模型增加依赖注入支持
* 改进模型事件
* 改进页面`Trace`机制
* 改进`validate`助手函数,支持设置验证失败后是否抛出异常
* 改进容器`bind`方法
* 改进Redis Session驱动
* 改进日志记录的空行问题
* 改进`RedirectResponse`
* 改进缓存驱动
* 改进`think optimize:schema` 指令
* Url类增加https方法
* 改进`isPjax`判断
* 改进Db类配置获取
### 问题修正
* 修正模型属性获取
* 修正Request类的过滤功能
* 修正`subDomain`方法
* 修正`input`助手函数
* 修正模型`refresh`方法
* 修正关联统计不使用子查询的方式
* 修正Request类`root`方法
* 修正缓存有效期处理
* 修正`MorphTo`关联
* 修正缓存标签
* 修正mysql驱动`insert`方法
* 修正Db类`connect`方法
* 修正`allowCrossDomain`方法
* 修正Query类`chunk`方法
* 修正分组跨域
* 修正关联预载入查询
* 修正时间字段写入
* 修正验证类`checkSize`
* 修正多对多关联闭包
* 修正RuleName类`setRule`方法
* 修正`whereTime`查询
* 修正`request`助手函数
* 修正日志关闭配置
* 修复对多字节字符的兼容性
### 用法调整
* 模型切换后缀方法`switch`更改为`suffix`
* 取消Query类的`fetchArray`方法
* `select`查询方法默认返回数据集对象
* 取消`optimize:config`指令
* 调整数据库和缓存配置文件格式 默认采用多类型支持 方便切换
* Cache类的`init`和`connect`方法取消 并入`store`方法
* `cache`助手函数调整
* `cache`助手函数取消初始化用法
* `cache`助手函数留空返回Cache对象
* 调整调试模式检测位置
* 默认时间字段类型改为`timestamp`
* 取消Model类`getConnection`和`setConnection`方法
* 注解路由移出核心,注解相关功能使用`topthink/think-annotation`
* 改进路由 取消`url_convert`配置参数
* 取消`route:build`指令
* 调整默认模板目录为根目录`view`
* 取消默认的请求日志记录 在项目里面自己添加
* 统一`find`查询必须使用查询条件
* 扩展的service配置文件默认放到vendor目录下
* 废除`LogLevel`事件
* 取消App类的序列化方法
* 控制台的`user`配置改为通过静态方法设置当前执行用户
## RC3(2019年6月3日)
RC3版本主要改进和优化了系统内置中间件,改进了一些用法和体验,并且把不常用的驱动移出核心改为扩展方式提供。
### 主要新特性
* 增加`whereWeek`日期查询
* 自增ID获取支持类型自动转换
* 当前请求记录匹配路由规则
* 增加`requireWithout`验证规则
* 优化路由ext和name方法以及URL生成
* 增加项目自定义类
* URL生成使用对象方式操作
* 修改器改进
* `dump`/`halt`助手函数调整支持输出多个变量
* 关联自动更新
* 模型数据集增加`delete`和`update`方法
* 模型支持表后缀以及动态切换
* 注解路由支持给某个路由指定所属分组
* 多语言支持分组定义
* 支持自定义加载语言文件
* 多语言定义支持YML格式
* 缓存标签改进
* 缓存类增加`push`方法
* Cookie保存时间支持DateTimeInterface
* 增加表单令牌中间件
* 控制器支持__call方法
* 增加`deny_app_list`配置参数
* 控制器中间件only和except定义不区分大小写
* `app_map`支持指定泛应用映射
### 问题修正
* 修正参数绑定的浮点型精度问题
* 修正软删除
* 修正模型的数据库连接
* 修正`RedirectResponse`
* 修正Session类`flush`方法
* 修正JSON字段参数绑定
* 修正`make:controller`指令生成
* 修正Cache类的`get`方法默认值
* 修正域名绑定
* 修正关联模型的动态获取器
* 修正模型`dateFormat`属性方法
* 修正url生成对多入口的支持
* 修正ini配置文件格式的布尔值转换问题
* 修正路由延迟解析全局配置无效的问题
* 修正路由缓存问题
* 修正关联`update`操作
* 修正`Relation::$selfRelation`默认为`null`,导致`Relation::isSelfRelation()`方法报错
* 修正`redis`缓存驱动
* 修正事件智能订阅`observe`方法
* 修正模型字段定义对日期查询无效的问题
* 修正Console类`getNamespaces`方法
* 修正`where`查询方法传入Query对象的时候缺少`bind`数据的问题
* 修正request类`method`方法
* 修正`route:list`指令
* 修正`Collection`类`load`方法
* 修正`redis`驱动的端口类型
* 修正`session`数据序列化使用JSON处理的问题
* 修正分组路由合并解析
* 修正模型的`hidden`方法隐藏关联模型的问题
* 修正关联查询关联键为空的错误
* 修正返回204状态码的响应判断
* 修正`Request`类`has`方法对`env`和`session`的支持
* 修正`provider.php`文件无效问题
* 修正关联查询的部分问题
* 修正validate助手函数支持指定验证器类
* 修正验证类`getValidateType`方法
* 修正入口单独开启调试模式
* 修正加载Composer应用
### 用法调整
* 页面trace中间件仅在调试模式有效
* `Socket`日志驱动移出核心
* `PostgreSQL`、`Sqlite`和`SqlServer`驱动移出核心,改为扩展
* 取消内置`think\Controller`基类
* `Yaconf`支持移出核心 纳入扩展`think-yaconf`
* 字段排除改为`withoutField`方法
* 取消`useGlobalScope`方法增加`withoutGlobalScope`方法
* 更改默认生成的中间件位置
* 加载默认语言包无需开启多语言中间件
* `Cookie`类恢复`get`和`has`方法支持
* `token`助手函数调整
* 全局请求缓存参数调整
* 统一中间件调用传参,不支持`:`分割传参
* 缓存数据统一进行序列化后存储
* Cache类rm方法更改为delete方法
* validate助手函数返回Validate对象实例,参数改变
### 废弃用法
* 取消多语言的`auto_detect`配置
* 取消`session`类的`auto_start`配置参数和`boot`方法
* 废弃`Where`数组对象查询
* 取消模型事件观察者
* 取消`JumpResponse`及`success`/`error`/`result`等方法和助手函数
* 取消表达式查询解析扩展及`think\db\Expression`类
* 废弃模型自动完成功能,使用模型事件替代
* 取消`cookie`的`prefix`参数
* 取消一系列不推荐使用的助手函数
* 取消`optimize:facade` `optimize:model`指令 改为扩展方式
* 取消命令行执行URL
* 删除`Config`类`__get` 和 `__isset` 方法
## RC2(2019年4月22日)
相比较`RC1`版本更新调整较大,主要更新如下:
* 底层架构针对协程做优化调整
* 增加WEB应用管理类`Http`
* 增加应用初始化服务和服务注册机制
* 查询事件和模型事件使用事件系统接管
* `Session`类重构,不再使用PHP内置会话
* `Cookie`类仅支持设置和写入,不再支持读取
* 取消`Config`类的动态设置功能
* 部分核心功能中间件化(页面Trace、多语言、请求缓存和Session初始化)
* 取消惯例配置文件
* 增加驱动接口规范驱动开发
* 改进Db类和查询类
* 精简一些不必要的类库
* 改进路由注册
* 由于异常的需要`View`类改为内置,但默认仅支持原生PHP模板
* 大量细节改进和修正
## RC1(2019年2月14日)
* 改进Url类`build`方法
* 修复获取当前页码数据类型
* 修正`parseKey`方法传入数值的情况
* 改进`optimize:config`指令对`declare`申明的支持
* 取消URL参数模式配置
* 增加`optimize:facade`指令用于生成`facade`类的方法注释
* 取消`Query`类的`extend`方法
* 原来的`Expression`类更改为`Raw`类
* 增加新的`Expression`类用于表达式查询扩展
* `Collection`类增加`whereLike`/`whereNotLike`/`whereIn`/`whereNotIn`/`whereBetween`/`whereNotBetween`等快捷方法
* Query类的`raw`方法移动到Db类
* 取消`Request`类的`hook`方法
* 修正`Route::view`方法
* 优化模型获取器方法
* 多对多关联的`pivotDataName`方法更名为`name`方法
* Query类增加`partition`/`duplicate`/`extra`方法
* 改进mysql驱动支持分区和`duplicate`以及额外参数
* mysql驱动的`insert`方法改用更清晰的`insert set`语法
* 修正`Event`类`bind`属性定义
* 修正验证类的`append`一处bug
* 改进`Query`类`update`方法支持读取模型的更新条件
* 取消模型类的`getUpdateWhere`方法统一使用`getWhere`方法
* 改进query类的`fetchArray`方法处理
* 改进路由类取消`app`属性
* 增加`think\facade\RuleName`类
* 增加`whereFieldRaw`查询方法
* 改进自动多应用名称获取
* App类增加`withEvent`方法支持关闭事件机制
* 改进`Dispatch`类对`var_dump`的支持
* 改进`hasMany`的`withCount`自关联
* 修正纯数字检测参数类型转换问题
* 修正`raw`助手函数
* `mysql`支持`find_in_set`查询
* 改进`url`方法对自动多应用的支持
- 序言
- 基础
- 安装
- 开发规范
- 目录结构
- 配置
- 架构
- 请求流程
- 架构总览
- 入口文件
- 多应用模式
- URL访问
- 容器和依赖注入
- 服务
- 门面
- 中间件
- 事件
- 路由
- 路由定义
- 变量规则
- 路由地址
- 路由参数
- 路由中间件
- 路由分组
- 资源路由
- 注解路由
- 路由绑定
- 域名路由
- MISS路由
- 跨域请求
- URL生成
- 控制器
- 控制器定义
- 基础控制器
- 空控制器
- 资源控制器
- 控制器中间件
- 请求
- 请求对象
- 请求信息
- 输入变量
- 请求类型
- HTTP头信息
- 伪静态
- 参数绑定
- 请求缓存
- 响应
- 响应输出
- 响应参数
- 重定向
- 文件下载
- 数据库
- 连接数据库
- 分布式数据库
- 查询构造器
- 查询数据
- 添加数据
- 更新数据
- 删除数据
- 查询表达式
- 链式操作
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- 聚合查询
- 分页查询
- 时间查询
- 高级查询
- 视图查询
- JSON字段
- 子查询
- 原生查询
- 查询事件
- 获取器
- 事务操作
- 存储过程
- 数据集
- 数据库驱动
- 模型
- 定义
- 模型字段
- 新增
- 更新
- 删除
- 查询
- 查询范围
- JSON字段
- 获取器
- 修改器
- 搜索器
- 数据集
- 自动时间戳
- 只读字段
- 软删除
- 类型转换
- 模型输出
- 模型事件
- 模型关联
- 一对一关联
- 一对多关联
- 远程一对多
- 远程一对一
- 多对多关联
- 多态关联
- 关联预载入
- 关联统计
- 关联输出
- 视图
- 模板变量
- 视图过滤
- 模板渲染
- 模板引擎
- 视图驱动
- 错误和日志
- 异常处理
- 日志处理
- 调试
- 调试模式
- Trace调试
- SQL调试
- 变量调试
- 远程调试
- 验证
- 验证器
- 验证规则
- 错误信息
- 验证场景
- 路由验证
- 内置规则
- 表单令牌
- 注解验证
- 杂项
- 缓存
- Session
- Cookie
- 多语言
- 上传
- 命令行
- 启动内置服务器
- 查看版本
- 自动生成应用目录
- 创建类库文件
- 清除缓存文件
- 生成数据表字段缓存
- 生成路由映射缓存
- 输出路由定义
- 自定义指令
- 扩展库
- 数据库迁移工具
- Workerman
- think助手工具库
- 验证码
- Swoole
- 附录
- 助手函数
- 升级指导
- 更新日志