# 更新日志
# 版本更新日志
- [V5.1.15 (2018-6-1)](#V5115_201861_4)
- [V5.1.14 (2018-5-18)](#V5114_2018518_35)
- [V5.1.13 (2018-5-11)](#V5113_2018511_54)
- [V5.1.12 (2018-4-25)](#V5112_2018425_83)
- [V5.1.11 (2018-4-19)](#V5111_2018419_97)
- [V5.1.10 (2018-4-16)](#V5110_2018416_110)
- [V5.1.9 (2018-4-12)](#V519_2018412_124)
- [V5.1.8 (2018-4-5)](#V518_201845_140)
- [V5.1.7 (2018-3-28)](#V517_2018328_160)
- [V5.1.6 (2018-3-26)](#V516_2018326_177)
- [V5.1.5 (2018-1-31)](#V515_2018131_231)
- [V5.1.4 (2018-1-19)](#V514_2018119_263)
- [V5.1.3 (2018-1-12)](#V513_2018112_281)
- [V5.1.2 (2018-1-8)](#V512_201818_302)
- [V5.1.1 (2018-1-3)](#V511_201813_316)
- [V5.1.0 (2018-1-1)](#V510_201811_326)
- [RC3版本(2017-11-6)](#RC32017116_385)
- [RC2版本(2017-10-17)](#RC220171017_419)
- [RC1(2017-9-8)](#RC1201798_480)
## V5.1.15 (2018-6-1)
该版本主要改进了路由缓存的性能和缓存方式设置,增加了JSON格式文件日志的支持,并修正了社区反馈的一些问题。
- 容器类增加`exists`方法 仅判断是否存在对象实例
- 取消配置类的`autoload`方法
- 改进路由缓存大小提高性能
- 改进Dispatch类`init`方法
- 增加`make:validate`指令生成验证器类
- Config类`get`方法支持默认值参数
- 修正字段缓存指令
- 改进App类对`null`数据的返回
- 改进模型类的`__isset`方法判断
- 修正`Query`类的`withAggregate`方法
- 改进`RuleItem`类的`setRuleName`方法
- 修正依赖注入和参数的冲突问题
- 修正Db类对第三方驱动的支持
- 修正模型类查询对象问题
- 修正File缓存驱动的`has`方法
- 修正资源路由嵌套
- 改进Request类对`$_SERVER`变量的读取
- 改进请求缓存处理
- 路由缓存支持指定单独的缓存方式和参数
- 修正资源路由的中间件多次执行问题
- 修正`optimize:config`指令
- 文件日志支持`JSON`格式日志保存
- 修正Db类`connect`方法
- 改进Log类`write`方法不会自动写入之前日志
- 模型的关联操作默认启用事务
- 改进软删除的事件响应
## V5.1.14 (2018-5-18)
该版本主要对底层容器进行了一些优化改进,并增加了路由缓存功能,可以进一步提升路由性能。
- 依赖注入的对象参数传入改进
- 改进核心类的容器实例化
- 改进日期字段的读取
- 改进验证类的`getScene`方法
- 模型的`create`方法和`save`方法支持`replace`操作
- 改进`Db`类的调用机制
- App类调整为容器类
- 改进容器默认绑定
- `Loader`类增加工厂类的实例化方法
- 增加路由变量默认规则配置参数
- 增加路由缓存设计
- 错误处理机制改进
- 增加清空路由缓存指令
## V5.1.13 (2018-5-11)
该版本主要增加了MySQL的XA事务支持,模型事件支持观察者,以及对Facade类的改进。
- 改进自动缓存
- 改进Url生成
- 修正数据缓存
- 修正`value`方法的缓存
- `join`方法和`view`方法的条件支持使用`Expression`对象
- 改进驱动的`parseKey`方法
- 改进Request类`host`方法和`domain`方法对端口的处理
- 模型增加`withEvent`方法用于控制当前操作是否需要执行模型事件
- 模型`setInc/setDec`方法支持更新事件
- 模型添加`before_restore/after_restore`事件
- 增加模型事件观察者
- 路由增加`mobile`方法设置是否允许手机访问
- 数据库XA事务支持
- 改进索引数组查询对`IN`查询的支持
- 修正`invokeMethod`方法
- 修正空数据写入返回值的BUG
- redis驱动支持`predis`
- 改进`parseData`方法
- 改进模块加载
- App类初始化方法调整
- 改进数组查询对表达式`Expression`对象支持
- 改进闭包的依赖注入调用
- 改进多对多关联的中间表模型更新
- 增加容器中对象的自定义实例化
## V5.1.12 (2018-4-25)
该版本主要改进了主从查询的及时性,并支持动态设置请求数据。
- 支持动态设置请求数据
- 改进`comment`方法解析
- 修正App类`__unset`方法
- 改进url生成的域名绑定
- 改进主从查询的及时性
- 修正`value`的数据缓存功能
- 改进分页类的集合对象方法调用
- 改进Db类的代码提示
- SQL日志增加主从标记
## V5.1.11 (2018-4-19)
该版本为安全和修正版本,改进了JSON查询的参数绑定问题和容器类对象实例获取,并包含一处可能的安全隐患,建议更新。
- 支持指定JSON数据查询的字段类型
- 修正`selectInsert`方法
- `whereColumn`方法支持数组方式
- 改进容器类`make`方法
- 容器类`delete`方法支持数组
- 改进`composer`自动加载
- 改进模板引擎
- 修正`like`查询的一处安全隐患
## V5.1.10 (2018-4-16)
该版本为修正版本,修正上一个版本的一些BUG,并增强了`think clear`指令。
- 改进`orderField`方法
- 改进`exists`查询
- 修改cli模式入口文件位置计算
- 修正`null`查询
- 改进`parseTime`方法
- 修正关联预载入查询
- 改进`mysql`驱动
- 改进`think clear`指令 支持 `-c -l -r`选项
- 改进路由规则对`/`结尾的支持
## V5.1.9 (2018-4-12)
该版本主要是一些改进和修正,并包含一个安全更新,是一个推荐更新版本。
- 默认模板渲染规则支持配置保持操作方法名
- 改进`Request`类的`ip`方法
- 支持模型软删除字段的默认值定义
- 改进路由变量规则对中文的支持
- 使用闭包查询的时候使用`cache(true)` 抛出异常提示
- 改进`Loader`类`loadComposerAutoloadFiles`方法
- 改进查询方法安全性
- 修正路由地址中控制器名驼峰问题
- 调整上一个版本的`module_init`和`app_begin`的钩子顺序问题
- 改进CLI命令行执行的问题
- 修正社区反馈的其它问题
## V5.1.8 (2018-4-5)
该版本主要改进了中间件的域名和模块支持,并同时修正了几个已知问题。
- 增加`template.auto_rule` 参数设置默认模板渲染的操作名自动转换规则
- 默认模板渲染规则改由视图驱动实现
- 修正路由标识定义
- 修正控制器路由方法
- 改进Request类`ip`方法支持自定义代理IP参数
- 路由注册中间件支持数组方式别名
- 改进命令行执行下的`composer`自动加载
- 添加域名中间件注册支持
- 全局中间件支持模块定义文件
- Log日志配置支持`close`参数可以全局关闭日志写入
- 中间件方法中捕获`HttpResponseException`异常
- 改进中间件的闭包参数传入
- 改进分组路由的延迟解析
- 改进URL生成对域名绑定的支持
- 改进文件缓存和文件日志驱动的并发支持
## V5.1.7 (2018-3-28)
该版本主要修正了路由的一些问题,并改进了查询的安全性。
- 支持`middleware`配置文件预先定义中间件别名方便路由调用
- 修正资源路由
- 改进`field`方法 自动识别`fieldRaw`
- 增加`Expression`类
- Query类增加`raw`方法
- Query类的`field`/ `order` 和`where`方法都支持使用`raw`表达式查询
- 改进`inc/dec`查询 支持批量更新
- 改进路由分组
- 改进Response类`create`方法
- 改进composer自动加载
- 修正域名路由的`append`方法
- 修正操作方法的初始化方法获取不到问题
## V5.1.6 (2018-3-26)
该版本主要改进了路由规则的匹配算法,大幅提升了路由性能。并正式引入了中间件的支持,可以在路由中定义或者全局定义。另外包含了一个安全更新,是一个建议更新版本。
- 改进URL生成对路由`ext`方法的支持
- 改进查询缓存对不同数据库相同表名的支持
- 改进composer自动加载的性能
- 改进空路由变量对默认参数的影响
- mysql的`json`字段查询支持多级
- Query类增加`option`方法
- 优化路由匹配
- 修复验证规则数字键名丢失问题
- 改进路由Url生成
- 改进一对一关联预载入查询
- Request类增加`rootDomain`方法
- 支持API资源控制器生成 `make:controller --api`
- 优化Template类的标签解析
- 容器类增加删除和清除对象实例的方法
- 修正MorphMany关联的`eagerlyMorphToMany`方法一处错误
- Container类的异常捕获改进
- Domain对象支持`bind`方法
- 修正分页参数
- 默认模板的输出规则不受URL影响
- 注解路由支持多级控制器
- Query类增加`getNumRows`方法获取前次操作影响的记录数
- 改进查询条件的性能
- 改进模型类`readTransform`方法对序列化类型的处理
- Log类增加`close`方法可以临时关闭当前请求的日志写入
- 文件日志方式增加自动清理功能(设置`max_files`参数)
- 修正Query类的`getPk`方法
- 修正模板缓存的布局开关问题
- 修正Query类`select`方法的缓存
- 改进input助手函数
- 改进断线重连的信息判断
- 改进正则验证方法
- 调整语言包的加载顺序 放到`app_init`之前
- controller类`fetch`方法改为`final`
- 路由地址中的变量支持使用`<var>`方式
- 改进XMLResponse 支持传入编码过的xml内容
- 修正Query类`view`方法的数组表名支持
- 改进路由的模型闭包绑定
- 改进分组变量规则的继承
- 改进`cli-server`模式下的`composer`自动加载
- 路由变量规则异常捕获
- 引入中间件支持
- 路由定义增加`middleware`方法
- 增加生成中间件指令`make:middleware`
- 增加全局中间件定义支持
- 改进`optimize:config`指令对全局中间件的支持
- 改进config类`has`方法
- 改进时间查询的参数绑定
- 改进`inc/dec/exp`查询的安全性
## V5.1.5 (2018-1-31)
该版本主要增强了数据库的JSON查询,并支持JSON字段的聚合查询,改进了一些性能问题,修正了路由的一些BUG,主要更新如下:
- 改进数据集查询对`JSON`数据的支持
- 改进聚合查询对`JSON`字段的支持
- 模型类增加`getOrFail`方法
- 改进数据库驱动的`parseKey`方法
- 改进Query类`join`方法的自关联查询
- 改进数据查询不存在不生成查询缓存
- 增加`run`命令行指令启动内置服务器
- `Request`类`pathinfo`方法改进对`cli-server`支持
- `Session`类增加`use_lock`配置参数设置是否启用锁机制
- 优化`File`缓存自动生成空目录的问题
- 域名及分组路由支持`append`方法传递隐式参数
- 改进日志的并发写入问题
- 改进`Query`类的`where`方法支持传入`Query`对象
- 支持设置单个日志文件的文件名
- 修正路由规则的域名条件约束
- `Request`类增加`subDomain`方法用于获取当前子域名
- `Response`类增加`allowCache`方法控制是否允许请求缓存
- `Request`类增加`sendData`方法便于扩展
- 改进`Env`类不依赖`putenv`方法
- 改进控制台`trace`显示错误
- 改进`MorphTo`关联
- 改进完整路由匹配后带斜线访问出错的情况
- 改进路由的多级分组问题
- 路由url地址生成支持多级分组
- 改进路由Url生成的`url_convert`参数的影响
- 改进`miss`和`auto`路由内部解析
- 取消预载入关联查询缓存功能
## V5.1.4 (2018-1-19)
该版本主要增强了数据库和模型操作,主要更新如下:
- 支持设置 `deleteTime`属性为`false` 关闭软删除
- 模型增加`getError`方法
- 改进Query类的`getTableFields`/`getFieldsType`方法 支持表名自动获取
- 模型类`toCollection`方法增加参数指定数据集类
- 改进`union`查询
- 关联预载入`with`方法增加缓存参数
- 改进模型类的`get`和`all`方法的缓存 支持关联缓存
- 支持`order by field`操作
- 改进`insertAll`分批写入
- 改进`json`字段数据支持
- 增加JSON数据的模型对象化操作
- 改进路由`ext`参数检测
- 修正`rule`方法的`method`参数使用 `get|post` 方式注册路由的问题
## V5.1.3 (2018-1-12)
该版本主要改进了路由及调整函数加载顺序,主要更新如下:
- 增加`env`助手函数;
- 增加`route`助手函数;
- 增加视图路由方法;
- 增加路由重定向方法;
- 路由默认区分最后的目录斜杆(支持设置不区分);
- 调整公共文件和配置文件的加载顺序(可以在配置文件中直接使用助手函数);
- 视图类增加`filter`方法设置输出过滤;
- `view`助手函数增加`filter`参数;
- 改进缓存生成指令;
- Session类的`get`方法支持获取多级;
- Request类`only`方法支持指定默认值;
- 改进路由分组;
- 修正使用闭包查询的时候自动数据缓存出错的情况;
- 废除`view_filter`钩子位置;
- 修正分组下面的资源路由;
- 改进session驱动;
## V5.1.2 (2018-1-8)
该版本改进了配置类及数据库类,主要更新如下:
- 修正嵌套路由分组;
- 修正自定义模板标签界定符后表达式语法出错的情况;
- 修正自关联的多次调用问题;
- 修正数组查询的`null`条件查询;
- 修正Query类的`order`及`field`的一处可能的BUG;
- 配置参数设置支持三级;
- 配置对象支持`ArrayAccess`;
- App类增加`path`方法用于设置应用目录;
- 关联定义增加`selfRelation`方法用于设置是否为自关联;
## V5.1.1 (2018-1-3)
修正一些反馈的BUG,包括:
- 修正Cookie类存取数组的问题
- 修正Controller的`fetch`方法
- 改进跨域请求
- 修正`insertAll`方法
- 修正`chunk`方法
## V5.1.0 (2018-1-1)
主要更新如下:
- 增加注解路由支持
- 路由支持跨域请求设置
- 增加`app_dispatch`钩子位置
- 修正多对多关联的`detach`方法
- 修正软删除的`destroy`方法
- Cookie类`httponly`参数默认为false
- 日志File驱动增加`single`参数配置记录同一个文件(不按日期生成)
- 路由的`ext`和`denyExt`方法支持不传任何参数
- 改进模型的`save`方法对`oracle`的支持
- Query类的`insertall`方法支持配合`data`和`limit`方法
- 增加`whereOr`动态查询支持
- 日志的ip地址记录改进
- 模型`saveAll`方法支持`isUpdate`方法
- 改进`Pivot`模型的实例化操作
- 改进Model类的`data`方法
- 改进多对多中间表模型类
- 模型增加`force`方法强制更新所有数据
- Hook类支持设置入口方法名称
- 改进验证类
- 改进`hasWhere`查询的数据重复问题
- 模型的`saveall`方法返回数据集对象
- 改进File缓存的`clear`方法
- 缓存添加统一的序列化机制
- 改进泛三级域名的绑定
- 改进泛域名的传值和取值
- Request类增加`panDomain`方法
- 改进废弃字段判断
- App类增加`create`方法用于实例化应用类库
- 容器类增加`has`方法
- 改进多数据库切换连接
- 改进断线重连的异常捕获
- 改进模型类`buildQuery`方法
- Query类增加`unionAll`方法
- 关联统计功能增强(支持Sum/Max/Min/Avg)
- 修正延迟写入
- chunk方法支持复合主键
- 改进JSON类型的写入
- 改进Mysql的insertAll方法
- Model类`save`方法改进复合主键包含自增的情况
- 改进Query类`inc`和`dec`方法的关键字处理
- File缓存inc和dec方法保持原来的有效期
- 改进redis缓存的有效期判断
- 增加checkRule方法用于单独数据的多个验证规则
- 修正setDec方法的延迟写入
- max和min方法增加force参数
- 二级配置参数区分大小写
- 改进join方法自关联的问题
- 修正关联模型自定义表名的情况
- Query类增加getFieldsType和getTableFields方法
- 取消视图替换功能及view\_replace\_str配置参数
- 改进域名绑定模块后的额外路由规则问题
- 改进mysql的insertAll方法
- 改进insertAll方法写入json字段数据的支持
- 改进redis长连接多编号库的情况
## RC3版本(2017-11-6)
主要更新如下:
- 改进redis驱动的`get`方法
- 修正Query类的`alias`方法
- `File`类错误信息支持多语言
- 修正路由的额外参数解析
- 改进`whereTime`方法
- 改进Model类`getAttr`方法
- 改进App类的`controller`和`validate`方法支持多层
- 改进`HasManyThrough`类
- 修正软删除的`restore`方法
- 改进`MorpthTo`关联
- 改进数据库驱动类的`parseKey`方法
- 增加`whereField`动态查询方法
- 模型增加废弃字段功能
- 改进路由的`after`行为检查和`before`行为机制
- 改进路由分组的检查
- 修正mysql的`json`字段查询
- 取消Connection类的`quote`方法
- 改进命令行的支持
- 验证信息支持多语言
- 修正路由模型绑定
- 改进参数绑定类型对枚举类型的支持
- 修正模板的`{$Think.version}`输出
- 改进模板`date`函数解析
- 改进`insertAll`方法支持分批执行
- Request类`host`方法支持反向代理
- 改进`JumpResponse`支持区分成功和错误模板
- 改进开启类库后缀后的关联外键自动识别问题
- 修正一对一关联的JOIN方式预载入查询问题
- Query类增加`hidden`方法
## RC2版本(2017-10-17)
主要更新如下:
- 修正视图查询
- 修正资源路由
- 修正`HasMany`关联 修正`where`方法的闭包查询
- 一对一关联绑定属性到父模型后 关联属性不再保留
- 修正应用的命令行配置文件读取
- 改进`Connection`类的`getCacheKey`方法
- 改进文件上传的非法图像异常
- 改进验证类的`unique`规则
- Config类`get`方法支持获取一级配置
- 修正count方法对`fetchSql`的支持
- 修正mysql驱动对`socket`支持
- 改进Connection类的`getRealSql`方法
- 修正`view`助手函数
- Query类增加`leftJoin``rightJoin` 和 `fullJoin`方法
- 改进app\_namespace的获取
- 改进`append`方法对一对一`bind`属性的支持
- 改进关联的`saveall`方法的返回值
- 路由标识设置异常修复
- 改进Route类`rule`方法
- 改进模型的`table`属性设置
- 改进composer autofile的加载顺序
- 改进`exception_handle`配置对闭包的支持
- 改进app助手函数增加参数
- 改进composer的加载路径判断
- 修正路由组合变量的URL生成
- 修正路由URL生成
- 改进`whereTime`查询并支持扩展规则
- File类的`move`方法第二个参数支持`false`
- 改进Config类
- 改进缓存类`remember`方法
- 惯例配置文件调整 Url类当普通模式参数的时候不做`urlencode`处理
- 取消`ROOT_PATH`和`APP_PATH`常量定义 如需更改应用目录 自己重新定义入口文件
- 增加`app_debug`的`Env`获取
- 修正泛域名绑定
- 改进查询表达式的解析机制
- mysql增加`regexp`查询表达式 支持正则查询
- 改进查询表达式的异常判断
- 改进model类的`destroy`方法
- 改进Builder类 取消`parseValue`方法
- 修正like查询的参数绑定问题
- console和start文件移出核心纳入应用库
- 改进Db类主键删除方法
- 改进泛域名绑定模块
- 取消`BIND_MODULE`常量 改为在入口文件使用`bind`方法设置
- 改进数组查询
- 改进模板渲染的异常处理
- 改进控制器基类的架构方法参数
- 改进Controller类的`success`和`error`方法
- 改进对浏览器`JSON-Handle`插件的支持
- 优化跳转模板的移动端显示
- 修正模型查询的`chunk`方法对时间字段的支持
- 改进trace驱动
- Collection类增加`push`方法
- 改进Redis Session驱动
- 增加JumpResponse驱动
## RC1(2017-9-8)
主要新特性为:
- 引入容器和Facade支持
- 依赖注入完善和支持更多场景
- 重构的(对象化)路由
- 配置和路由目录独立
- 取消系统常量
- 助手函数增强
- 类库别名机制
- 模型和数据库增强
- 验证类增强
- 模板引擎改进
- 支持PSR-3日志规范
- RC1版本取消了5.0多个字段批量数组查询的方式
- 序言
- 基础
- 安装
- 开发规范
- 目录结构
- 配置
- 架构
- 架构总览
- 入口文件
- URL访问
- 模块设计
- 命名空间
- 容器和依赖注入
- Facade
- 钩子和行为
- 中间件
- 路由
- 路由定义
- 变量规则
- 路由地址
- 闭包支持
- 路由参数
- 路由缓存
- 跨域请求
- 注解路由
- 路由分组
- MISS路由
- 资源路由
- 快捷路由
- 路由别名
- 路由绑定
- 域名路由
- URL生成
- 控制器
- 控制器定义
- 前置操作
- 跳转和重定向
- 空操作和空控制器
- 分层控制器
- 资源控制器
- 请求
- 请求对象
- 请求信息
- 输入变量
- 请求类型
- HTTP头信息
- 伪静态
- 参数绑定
- 请求缓存
- 响应
- 响应输出
- 响应参数
- 重定向
- 数据库
- 连接数据库
- 查询构造器
- 查询数据
- 添加数据
- 更新数据
- 删除数据
- 查询表达式
- 链式操作
- 聚合查询
- 时间查询
- 高级查询
- 视图查询
- JSON字段
- 子查询
- 原生查询
- 查询事件
- 事务操作
- 监听SQL
- 存储过程
- 数据集
- 分布式数据库
- 模型
- 定义
- 新增
- 更新
- 删除
- 查询
- JSON字段
- 获取器
- 修改器
- 自动时间戳
- 只读字段
- 软删除
- 类型转换
- 数据完成
- 查询范围
- 模型输出
- 模型事件
- 模型关联
- 一对一关联
- 一对多关联
- 远程一对多
- 多对多关联
- 多态关联
- 关联预载入
- 关联统计
- 关联输出
- 视图
- 视图渲染
- 视图赋值
- 视图过滤
- 模板引擎
- 模板
- 变量输出
- 使用函数
- 运算符
- 原样输出
- 模板注释
- 模板布局
- 模板继承
- 包含文件
- 输出替换
- 标签库
- 内置标签
- 循环标签
- 比较标签
- 条件判断
- 资源文件加载
- 标签嵌套
- 原生PHP
- 定义标签
- 标签扩展
- 错误和日志
- 异常处理
- 日志处理
- 调试
- 调试模式
- Trace调试
- 性能调试
- SQL调试
- 变量调试
- 远程调试
- 验证
- 验证器
- 验证规则
- 错误信息
- 验证场景
- 路由验证
- 内置规则
- 独立验证
- 静态调用
- 表单令牌
- 杂项
- 缓存
- Session
- Cookie
- 多语言
- 分页
- 上传
- 命令行
- 启动内置服务器
- 自动生成目录结构
- 创建类库文件
- 生成类库映射文件
- 清除缓存文件
- 生成配置缓存文件
- 生成数据表字段缓存
- 生成路由映射缓存
- 自定义指令
- 扩展库
- 验证码
- 图像处理
- Time
- 数据库迁移工具
- Workerman
- MongoDb
- 单元测试
- 安全和性能
- 安全建议
- 优化建议
- 附录
- 助手函数
- 升级指导
- 更新日志