diff --git a/.gitignore b/.gitignore index 7846e89ed9dea7fce9f4bd48b0f23b7b64100362..2b6f52c4c238b3354bdda70342eb7ba4cdbf8c32 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ -.idea -composer.lock +/.idea +/.vscode +/vendor *.log thinkphp +.env +.DS_Store diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000000000000000000000000000000000000..cef01005e40267f3fddf572c270d4cf6d386227b --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,904 @@ +## V5.1.38 LTS(2019-8-8) + +本次更新为常规更新,主要包括: + +* `Request`类增加`isJson`方法 +* 改进浮点型查询 +* 修正关联查询关联外键为空的查询错误 +* 远程一对多支持关联统计和预载入查询 +* 远程一对多关联支持`has`/`hasWhere`查询 +* 优化`parseIn`解析 +* 改进`parseLike`查询 +* 改进Url生成 +* 改进模型的`toArray`方法 +* 修正`notIn`查询 +* 改进`JSON`字段查询 +* 改进Controller类`display`/`fetch`方法返回`ViewResponse`对象 +* 改进`param`方法 +* 改进`mysql`驱动`getExplain`方法 +* 改进时间查询 +* 改进模型关联的`has`/`hasWhere`方法对软删除的支持 +* 修正社区反馈的BUG + +## V5.1.37 LTS(2019-5-26) + +本次更新为常规更新,主要更新如下: + +* 改进关联数据更新 +* 修正关联动态获取器 +* 改进`redis`驱动 +* 修复验证规则里面出现二维数组时的错误 +* 改进跨域请求支持 +* 完善模型`hidden`方法对关联属性的支持 +* 改进`where`查询方法传入`Query`对象的支持`bind`数据 +* 改进数据集对象的`load`方法 +* 修正缓存类`clear`方法对`tag`的支持 + +## V5.1.36 LTS(2019-4-28) + +本次更新为常规更新,主要更新如下: + +* 修正`chunk`方法一处异常抛出的错误 +* 修正模型输出的`visible` +* 改进环境变量加载 +* 改进命令行日志的`level`配置支持 +* 修复设置有缓存前缀时,无法清空缓存标签的问题 +* HasMony对象`saveAll`方法兼容`Collection`格式参数格式 +* 修正`whereOr`查询使用字符串的问题 +* 改进`dateFormat`设置对写入数据的影响 +* 修正查询缓存 +* 记住指定的跳转地址 +* 改进软删除 +* 改进聚合查询SQL去除limit 1 +* 改进缓存驱动 + +## V5.1.35 LTS(2019-3-2) + +本次主要为常规更新,修正了一些反馈的问题。 + +* 修正验证类自定义验证方法执行两次的问题 +* 模型增加`isEmpty`方法用于判断是否空模型 +* 改进获取器对`append`的支持 +* 修正一对多关联的`withCount`自关联问题 +* facade类注释调整 +* 改进关联属性的`visible`和`hidden`判断 +* 修正路由分组的`MISS`路由 +* 改进pgsql.sql + +## V5.1.34 LTS(2019-1-30) + +本次更新为常规更新,修正了一些反馈的问题。 + +* 改进Request类的`has`方法,支持`patch` +* 改进`unique`验证的多条件支持 +* 修复自定义上传验证,检测文件大小 +* 改进`in`查询支持表达式 +* 改进路由的`getBind`方法 +* 改进验证类的错误信息获取 +* 改进`response`助手函数默认值 +* 修正mysql的`regexp`查询 +* 改进模型类型强制转换写入对`Expression`对象的支持 + +## V5.1.33 LTS(2019-1-16) + +* 修复路由中存在多个相同替换的正则BUG +* 修正whereLike查询 +* join方法支持参数绑定 +* 改进union方法 +* 修正多对多关联的attach方法 +* 改进验证类的正则规则自定义 +* 改进Request类method方法 +* 改进File日志类型的CLI日志写入 +* 改进文件日志time_format配置对JSON格式的支持 + +## V5.1.32 LTS(2018-12-24) + +本次主要为常规更新,修正了一些反馈的问题。 + + +* 改进多对多关联的`attach`方法 +* 改进聚合查询的`field`处理 +* 改进关联的`save`方法 +* 修正模型`exists`方法返回值 +* 改进时间字段写入和输出 +* 改进控制器中间件的调用 +* 改进路由变量替换的性能 +* 改进缓存标签的处理机制 + +## V5.1.31 LTS (2018-12-9) + +本次版本包含一个安全更新,建议升级。 + +* 改进`field`方法 +* 改进`count`方法返回类型 +* `download`函数增加在浏览器中显示文件功能 +* 修正多对多模型的中间表数据写入 +* 改进`sqlsrv`驱动支持多个Schemas模式查询 +* 统一助手函数与\think\response\Download函数文件过期时间 +* 完善关联模型的`save`方法 增加`make`方法仅创建对象不保存 +* 修改条件表达式对静态变量的支持 +* 修正控制器名获取 +* 改进view方法的`field`解析 + +## V5.1.30 LTS(2018-11-30) + +该版本为常规更新,修正了一些社区反馈的问题。 + +主要更新如下: + +* 改进查询类的`execute`方法 +* 判断路由规则定义添加对请求类型的判断 +* 修复`orderRaw`异常 +* 修正 `optimize:autoload`指令 +* 改进软删除的`destroy`方法造成重复执行事件的问题 +* 改进验证类对扩展验证规则 始终验证 不管是否`require` +* 修复自定义验证`remove`所有规则的异常 +* 改进时间字段的自动写入支持微秒数据 +* 改进`Connection`类的`getrealsql`方法 +* 修正`https`地址的URL生成 +* 修复 `array_walk_recursive` 在低于PHP7.1消耗内部指针问题 +* 改进手动参数绑定使用 +* 改进聚合查询方法的`field`参数支持`Expression` + +## V5.1.29 LTS(2018-11-11) + +该版本主要改进了参数绑定的解析问题和提升性能,并修正了一些反馈的问题。 + +* 改进手动参数绑定 +* 修正MISS路由的分组参数无效问题 +* 行为支持对象的方法 +* 修正全局查询范围 +* 改进`belongsto`关联的`has`方法 +* 改进`hasMany`关联 +* 改进模型观察者多次注册的问题 +* 改进`query`类的默认查询参数处理 +* 修正`parseBetween`解析方法 +* 改进路由地址生成的本地域名支持 +* 改进参数绑定的实际URL解析性能 +* 改进`Env`类的`getEnv`和`get`方法 +* 改进模板缓存的生成优化 +* 修复验证类的多语言支持 +* 修复自定义场景验证`remove`规则异常 +* File类添加是否自动补全扩展名的选项 +* 改进`strpos`对子串是否存在的判断 +* 修复`choice`无法用值选择第一个选项问题 +* 验证器支持多维数组取值验证 +* 改进解析`extend`和`block`标签的正则 + +## V5.1.28 LTS(2018-10-29) + +该版本主要修正了上一个版本存在的一些问题,并改进了关联查询 + +* 改进聚合查询方法的字段支持DISTINCT +* 改进定义路由后url函数的端口生成 +* 改进控制器中间件对`swoole`等的支持 +* 改进Log类`save`方法 +* 改进验证类的闭包验证参数 +* 多对多关联支持指定中间表数据的名称 +* 关联聚合查询支持闭包方式指定聚合字段 +* 改进Lang类`get`方法 +* 多对多关联增加判断关联数据是否存在的方法 +* 改进关联查询使用`fetchsql`的情况 +* 改进修改器的是否已经执行判断 +* 增加`afterWith`和`beforeWith`验证规则 用于比较日期字段 + +## V5.1.27 LTS(2018-10-22) + +该版本主要修正了路由绑定的参数,改进了修改器的执行多次问题,并正式宣布为LTS版本! + + +* 修正路由绑定的参数丢失问题 +* 修正路由别名的参数获取 +* 改进修改器会执行多次的问题 + +## V5.1.26(2018-10-12) + +该版本主要修正了上一个版本的一些问题,并改进了全局查询范围的支持,同时包含了一个安全更新。 + + +* 修正单一模块下注解路由无效的问题 +* 改进数据库的聚合查询的字段处理 +* 模型类增加`globalScope`属性定义 用于指定全局的查询范围 +* 模型的`useGlobalScope`方法支持传入数组 用于指定当前查询需要使用的全局查询范围 +* 改进数据集的`order`方法对数字类型的支持 +* 修正上一个版本`order`方法解析的一处BUG +* 排序字段不合法或者错误的时候抛出异常 +* 改进`Request`类的`file`方法对上传文件的错误判断 + +## V5.1.25(2018-9-21) + +该版本主要改进了查询参数绑定的性能和对浮点型的支持,以及一些细节的完善。 + +* 修正一处命令行问题 +* 改进`Socketlog`日志驱动,支持自定义默认展开日志类别 +* 修正`MorphMany`一处bug +* 跳转到上次记住的url,并支持默认值 +* 改进模型的异常提示 +* 改进参数绑定对浮点型的支持 +* 改进`order`方法解析 +* 改进`json`字段数据的自动编码 +* 改进日志`log_write`可能造成的日志写入死循环 +* Log类增加`log_level`行为标签位置,用于对某个类型的日志进行处理 +* Route类增加`clear`方法清空路由规则 +* 分布式数据库配置支持使用数组 +* 单日志文件也支持`max_files`参数 +* 改进查询参数绑定的性能 +* 改进别名路由的URL后缀参数检测 +* 控制器前置方法和控制器中间件的`only`和`except`定义不区分大小写 + +## V5.1.24(2018-9-5) + +该版本主要增加了命令行的表格输出功能,并增加了查看路由定义的指令,以及修正了社区的一些反馈问题。 + +* 修正`Request`类的`file`方法 +* 修正路由的`cache`方法 +* 修正路由缓存的一处问题 +* 改进上传文件获取的异常处理 +* 改进`fetchCollection`方法支持传入数据集类名 +* 修正多级控制器的注解路由生成 +* 改进`Middleware`类`clear`方法 +* 增加`route:list`指令用于[查看定义的路由](752690) 并支持排序 +* 命令行增加`Table`输出类 +* `Command`类增加`table`方法用于输出表格 +* 改进搜索器查询方法支持别名定义 +* 命令行配置增加`auto_path`参数用于定义自动载入的命令类路径 +* 增加`make:command`指令用于[快速生成指令](354146) +* 改进`make:controller`指令对操作方法后缀的支持 +* 改进命令行的定义文件支持索引数组 用于指令对象的惰性加载 +* 改进`value`和`column`方法对后续查询结果的影响 +* 改进`RuleName`类的`setRule`方法 + +## V5.1.23(2018-8-23) + +该版本主要改进了数据集对象的处理,增加了`findOrEmpty`方法,并且修正了一些社区反馈的BUG。 + +* 数据集类增加`diff`/`intersect`方法用于获取差集和交集(默认根据主键值比较) +* 数据集类增加`order`方法支持指定字段排序 +* 数据集类增加`map`方法使用回调函数处理数据并返回新的数据集对象 +* Db增加`allowEmpty`方法允许`find`方法在没有数据的时候返回空数组或者空模型对象而不是null +* Db增加`findOrEmpty`方法 +* Db增加`fetchCollection`方法用于指定查询返回数据集对象 +* 改进`order`方法的数组方式解析,增强安全性 +* 改进`withSearch`方法,支持第三个参数传入字段前缀标识,用于多表查询字段搜索 +* 修正`optimize:route`指令开启类库后缀后的注解路由生成 +* 修正redis缓存及session驱动 +* 支持指定`Yaconf`的独立配置文件 +* 增加`yaconf`助手函数用于配置文件 + + +## V5.1.22(2018-8-9) + +该版本主要增加了模型搜索器和`withJoin`方法,完善了模型输出和对`Yaconf`的支持,修正了一些社区反馈的BUG。 + +* 改进一对一关联的`table`识别问题 +* 改进内置`Facade`类 +* 增加`withJoin`方法支持`join`方式的[一对一关联](一对一关联.md)查询 +* 改进`join`预载入查询的空数据问题 +* 改进`Config`类的`load`方法支持快速加载配置文件 +* 改进`execute`方法和事务的断线重连 +* 改进`memcache`驱动的`has`方法 +* 模型类支持定义[搜索器](搜索器.md)方法 +* 完善`Config`类对`Yaconf`的支持 +* 改进模型的`hidden/visible/append/withAttr`方法,支持在[查询前后调用](数组访问.md),以及支持数据集对象 +* 数据集对象增加`where`方法根据字段或者关联数据[过滤数据](模型数据集.md) +* 改进AJAX请求的`204`判断 + + +## V5.1.21(2018-8-2) + +该版本主要增加了下载响应对象和数组查询对象的支持,并修正了一些社区反馈的问题。 + +* 改进核心对象的无用信息调试输出 +* 改进模型的`isRelationAttr`方法判断 +* 模型类的`get`和`all`方法并入Db类 +* 增加[下载响应对象](文件下载.md)和`download`助手函数 +* 修正别名路由配置定义读取 +* 改进`resultToModel`方法 +* 修正开启类库后缀后的注解路由生成 +* `Response`类增加`noCache`快捷方法 +* 改进路由对象在`Swoole`/`Workerman`下面参数多次合并问题 +* 修正路由`ajax`/`pjax`参数后路由变量无法正确获取的问题 +* 增加清除中间件的方法 +* 改进依赖注入的参数规范自动识别(便于对接前端小写+下划线规范) +* 改进`hasWhere`的数组条件的字段判断 +* 增加[数组查询对象](高级查询.md)`Where`支持(喜欢数组查询的福音) +* 改进多对多关联的闭包支持 + +## V5.1.20(2018-7-25) + +该版本主要增加了Db和模型的动态获取器的支持,并修正了一些已知问题。 + +* Db类添加[获取器支持](703981) +* 支持模型及关联模型字段[动态定义获取器](354046) +* 动态获取器支持`JSON`字段 +* 改进路由的`before`行为执行(匹配后执行) +* `Config`类支持`Yaconf` +* 改进Url生成的端口问题 +* Request类增加`setUrl`和`setBaseUrl`方法 +* 改进页面trace的信息显示 +* 修正`MorphOne`关联 +* 命令行添加[查看版本指令](703994) + +## V5.1.19 (2018-7-13) + +该版本是一个小幅改进版本,针对`Swoole`和`Workerman`的`Cookie`支持做了一些改进,并修正了一些已知的问题。 + + +* 改进query类`delete`方法对软删除条件判断 +* 修正分表查询的软删除问题 +* 模型查询的时候同时传入`table`和`name`属性 +* 容器类增加`IteratorAggregate`和`Countable`接口支持 +* 路由分组支持对下面的资源路由统一设置`only/except/vars`参数 +* 改进Cookie类更好支持扩展 +* 改进Request类`post`方法 +* 改进模型自关联的自动识别 +* 改进Request类对`php://input`数据的处理 + + +## V5.1.18 (2018-6-30) + +该版本主要完善了对`Swoole`和`Workerman`的`HttpServer`运行支持,改进`Request`类,并修正了一些已知的问题。 + +* 改进关联`append`方法的处理 +* 路由初始化和检测方法分离 +* 修正`destroy`方法强制删除 +* `app_init`钩子位置移入`run`方法 +* `think-swoole`扩展更新到2.0版本 +* `think-worker`扩展更新到2.0版本 +* 改进Url生成的域名自动识别 +* `Request`类增加`setPathinfo`方法和`setHost`方法 +* `Request`类增加`withGet`/`withPost`/`withHeader`/`withServer`/`withCookie`/`withEnv`方法进行赋值操作 +* Route类改进`host`属性的获取 +* 解决注解路由配置不生效的问题 +* 取消Test日志驱动,改为使用`close`设置关闭全局日志写入 +* 修正路由的`response`参数 +* 修正204响应输出的判断 + +## V5.1.17 (2018-6-18) + +该版本主要增加了控制器中间件的支持,改进了路由功能,并且修正了社区反馈的一些问题。 + +* 修正软删除的`delete`方法 +* 修正Query类`Count`方法 +* 改进多对多`detach`方法 +* 改进Request类`Session`方法 +* 增加控制器中间件支持 +* 模型类增加`jsonAssoc`属性用于定义json数据是否返回数组 +* 修正Request类`method`方法的请求伪装 +* 改进静态路由的匹配 +* 分组首页路由自动完整匹配 +* 改进sqlsrv的`column`方法 +* 日志类的`apart_level`配置支持true自动生成对应类型的日志文件 +* 改进`204`输出判断 +* 修正cli下页面输出的BUG +* 验证类使用更高效的`ctype`验证机制 +* 改进Request类`cookie`方法 +* 修正软删除的`withTrashed`方法 +* 改进多态一对多的预载入查询 +* 改进Query类`column`方法的缓存读取 +* Query类增加`whereBetweenTimeField`方法 +* 改进分组下多个相同路由规则的合并匹配问题 +* 路由类增加`getRule`/`getRuleList`方法获取定义的路由 + +## V5.1.16 (2018-6-7) + +该版本主要修正了社区反馈的一些问题,并对Request类做了进一步规范和优化。 + +* 改进Session类的`boot`方法 +* App类的初始化方法可以单独执行 +* 改进Request类的`param`方法 +* 改进资源路由的变量替换 +* Request类增加`__isset`方法 +* 改进`useGlobalScope`方法对软删除的影响 +* 修正命令行调用 +* 改进Cookie类`init`方法 +* 改进多对多关联删除的返回值 +* 一对多关联写入支持`replace` +* 路由增加`filter`检测方法,用于通过请求参数检测路由是否匹配 +* 取消Request类`session/env/server`方法的`filter`参数 +* 改进关联的指定属性输出 +* 模型删除操作删除后不清空对象数据仅作标记 +* 调整模型的`save`方法返回值为布尔值 +* 修正Request类`isAjax`方法 +* 修正中间件的模块配置读取 +* 取消Request类的请求变量的设置功能 +* 取消请求变量获取的默认修饰符 +* Request类增加`setAction/setModule/setController`方法 +* 关联模型的`delete`方法调用Query类 +* 改进URL生成的域名识别 +* 改进URL检测对已定义路由的域名判断 +* 模型类增加`isExists`和`isForce`方法 +* 软删除的`destroy`和`restore`方法返回值调整为布尔值 + +## 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` +* 路由地址中的变量支持使用``方式 +* 改进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多个字段批量数组查询的方式 \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt index 574a39c401ff71ffcb90d15edb906b8046c7661b..774fa76fd417171f928001ee064a84b95523851a 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 -版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) +版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn) All rights reserved。 ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 diff --git a/README.md b/README.md index 81cf109fa26d2ce273f409e9ad292dc376ee5133..4b96c8dc94f8ddf8032e3032b3b9e77a32f73277 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,67 @@ -ThinkPHP 5.0 +![](https://box.kancloud.cn/5a0aaa69a5ff42657b5c4715f3d49221) + +ThinkPHP 5.1(LTS版本) —— 12载初心,你值得信赖的PHP框架 =============== -[![Total Downloads](https://poser.pugx.org/topthink/think/downloads)](https://packagist.org/packages/topthink/think) -[![Latest Stable Version](https://poser.pugx.org/topthink/think/v/stable)](https://packagist.org/packages/topthink/think) -[![Latest Unstable Version](https://poser.pugx.org/topthink/think/v/unstable)](https://packagist.org/packages/topthink/think) -[![License](https://poser.pugx.org/topthink/think/license)](https://packagist.org/packages/topthink/think) - -ThinkPHP5在保持快速开发和大道至简的核心理念不变的同时,PHP版本要求提升到5.4,对已有的CBD模式做了更深的强化,优化核心,减少依赖,基于全新的架构思想和命名空间实现,是ThinkPHP突破原有框架思路的颠覆之作,其主要特性包括: - - + 基于命名空间和众多PHP新特性 - + 核心功能组件化 - + 强化路由功能 - + 更灵活的控制器 - + 重构的模型和数据库类 - + 配置文件可分离 - + 重写的自动验证和完成 - + 简化扩展机制 - + API支持完善 - + 改进的Log类 - + 命令行访问支持 - + REST支持 - + 引导文件支持 - + 方便的自动生成定义 - + 真正惰性加载 - + 分布式环境支持 - + 更多的社交类库 - -> ThinkPHP5的运行环境要求PHP5.4以上。 - -详细开发文档参考 [ThinkPHP5完全开发手册](http://www.kancloud.cn/manual/thinkphp5) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/top-think/framework/badges/quality-score.png?b=5.1)](https://scrutinizer-ci.com/g/top-think/framework/?branch=5.1) +[![Build Status](https://travis-ci.org/top-think/framework.svg?branch=master)](https://travis-ci.org/top-think/framework) +[![Total Downloads](https://poser.pugx.org/topthink/framework/downloads)](https://packagist.org/packages/topthink/framework) +[![Latest Stable Version](https://poser.pugx.org/topthink/framework/v/stable)](https://packagist.org/packages/topthink/framework) +[![PHP Version](https://img.shields.io/badge/php-%3E%3D5.6-8892BF.svg)](http://www.php.net/) +[![License](https://poser.pugx.org/topthink/framework/license)](https://packagist.org/packages/topthink/framework) + +ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括: + + + 采用容器统一管理对象 + + 支持Facade + + 注解路由支持 + + 路由跨域请求支持 + + 配置和路由目录独立 + + 取消系统常量 + + 助手函数增强 + + 类库别名机制 + + 增加条件查询 + + 改进查询机制 + + 配置采用二级 + + 依赖注入完善 + + 支持`PSR-3`日志规范 + + 中间件支持(V5.1.6+) + + Swoole/Workerman支持(V5.1.18+) + + +> ThinkPHP5的运行环境要求PHP5.6以上。 + +## 安装 + +使用composer安装 + +~~~ +composer create-project topthink/think tp +~~~ + +启动服务 + +~~~ +cd tp +php think run +~~~ + +然后就可以在浏览器中访问 + +~~~ +http://localhost:8000 +~~~ + +更新框架 +~~~ +composer update topthink/framework +~~~ + + +## 在线手册 + ++ [完全开发手册](https://www.kancloud.cn/manual/thinkphp5_1/content) ++ [升级指导](https://www.kancloud.cn/manual/thinkphp5_1/354155) ## 目录结构 @@ -39,19 +72,34 @@ www WEB部署目录(或者子目录) ├─application 应用目录 │ ├─common 公共模块目录(可以更改) │ ├─module_name 模块目录 -│ │ ├─config.php 模块配置文件 │ │ ├─common.php 模块函数文件 │ │ ├─controller 控制器目录 │ │ ├─model 模型目录 │ │ ├─view 视图目录 │ │ └─ ... 更多类库目录 │ │ -│ ├─command.php 命令行工具配置文件 +│ ├─command.php 命令行定义文件 │ ├─common.php 公共函数文件 -│ ├─config.php 公共配置文件 -│ ├─route.php 路由配置文件 -│ ├─tags.php 应用行为扩展定义文件 -│ └─database.php 数据库配置文件 +│ └─tags.php 应用行为扩展定义文件 +│ +├─config 应用配置目录 +│ ├─module_name 模块配置目录 +│ │ ├─database.php 数据库配置 +│ │ ├─cache 缓存配置 +│ │ └─ ... +│ │ +│ ├─app.php 应用配置 +│ ├─cache.php 缓存配置 +│ ├─cookie.php Cookie配置 +│ ├─database.php 数据库配置 +│ ├─log.php 日志配置 +│ ├─session.php Session配置 +│ ├─template.php 模板引擎配置 +│ └─trace.php Trace配置 +│ +├─route 路由定义目录 +│ ├─route.php 路由定义 +│ └─... 更多 │ ├─public WEB目录(对外访问目录) │ ├─index.php 入口文件 @@ -82,9 +130,8 @@ www WEB部署目录(或者子目录) ├─think 命令行入口文件 ~~~ -> router.php用于php自带webserver支持,可用于快速测试 -> 切换到public目录后,启动命令:php -S localhost:8888 router.php -> 上面的目录结构和名称是可以改变的,这取决于你的入口文件和配置参数。 +> 可以使用php自带webserver快速测试 +> 切换到根目录后,启动命令:php think run ## 命名规范 @@ -98,6 +145,7 @@ www WEB部署目录(或者子目录) * 类名和类文件名保持一致,统一采用驼峰法命名(首字母大写); ### 函数和类、属性命名 + * 类的命名采用驼峰法,并且首字母大写,例如 `User`、`UserType`,默认不需要添加后缀,例如`UserController`应该直接命名为`User`; * 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 `get_client_ip`; * 方法的命名使用驼峰法,并且首字母小写,例如 `getUserName`; @@ -105,13 +153,16 @@ www WEB部署目录(或者子目录) * 以双下划线“__”打头的函数或方法作为魔法方法,例如 `__call` 和 `__autoload`; ### 常量和配置 + * 常量以大写字母和下划线命名,例如 `APP_PATH`和 `THINK_PATH`; * 配置参数以小写字母和下划线命名,例如 `url_route_on` 和`url_convert`; ### 数据表和字段 + * 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 `think_user` 表和 `user_name`字段,不建议使用驼峰和中文作为数据表字段命名。 ## 参与开发 + 请参阅 [ThinkPHP5 核心框架包](https://github.com/top-think/framework)。 ## 版权信息 @@ -120,7 +171,7 @@ ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 本项目包含的第三方源码和二进制文件之版权信息另行标注。 -版权所有Copyright © 2006-2017 by ThinkPHP (http://thinkphp.cn) +版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn) All rights reserved。 diff --git a/application/index/controller/Index.php b/application/index/controller/Index.php index 2ab0697ba33fa16b2aa5315fb705fcec7b25acf2..a00d6828789632f9acbc48b329563577520fc6f1 100644 --- a/application/index/controller/Index.php +++ b/application/index/controller/Index.php @@ -5,6 +5,11 @@ class Index { public function index() { - return '

:)

ThinkPHP V5
十年磨一剑 - 为API开发设计的高性能框架

[ V5.0 版本由 七牛云 独家赞助发布 ]
'; + return '

:)

ThinkPHP V5.1
12载初心不改(2006-2018) - 你值得信赖的PHP框架

'; + } + + public function hello($name = 'ThinkPHP5') + { + return 'hello,' . $name; } } diff --git a/application/provider.php b/application/provider.php new file mode 100644 index 0000000000000000000000000000000000000000..d0fcd2454482b0aa3af3e839ba7836faac6fdda4 --- /dev/null +++ b/application/provider.php @@ -0,0 +1,14 @@ + +// +---------------------------------------------------------------------- + +// 应用容器绑定定义 +return [ +]; diff --git a/application/tags.php b/application/tags.php index e213e0aae025a07c5e061a55db8ebafe1aa373f5..4b18d1050b7c1263ff327ba6a149123df323f869 100644 --- a/application/tags.php +++ b/application/tags.php @@ -2,7 +2,7 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- diff --git a/build.php b/build.php index b37d3abed850dc9e617d3d6aedc1da0e9dcb93a3..34ba3c8407ba2f0bd080b67e5b66d12f71eae2c5 100644 --- a/build.php +++ b/build.php @@ -2,7 +2,7 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- @@ -11,7 +11,7 @@ return [ // 生成应用公共文件 - '__file__' => ['common.php', 'config.php', 'database.php'], + '__file__' => ['common.php'], // 定义demo模块的自动生成 (按照实际定义的文件名生成) 'demo' => [ @@ -21,5 +21,6 @@ return [ 'model' => ['User', 'UserType'], 'view' => ['index/index'], ], + // 其他更多的模块定义 ]; diff --git a/composer.json b/composer.json index c4de66b83dfe11773b48e8057830105eb0b5f058..361d6f66617b2dc2c93b9019911b51834ef86e56 100644 --- a/composer.json +++ b/composer.json @@ -16,8 +16,13 @@ } ], "require": { - "php": ">=5.4.0", - "topthink/framework": "^5.0" + "php": ">=5.6.0", + "topthink/framework": "5.1.*" + }, + "autoload": { + "psr-4": { + "app\\": "application" + } }, "extra": { "think-path": "thinkphp" diff --git a/application/config.php b/config/app.php similarity index 46% rename from application/config.php rename to config/app.php index 21c0531f709bdc8de3e2d64d91832870a3b4e77f..680c56cdf5b18edac70672d012b3bee36d29693e 100644 --- a/application/config.php +++ b/config/app.php @@ -2,34 +2,32 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st // +---------------------------------------------------------------------- -return [ - // +---------------------------------------------------------------------- - // | 应用设置 - // +---------------------------------------------------------------------- +// +---------------------------------------------------------------------- +// | 应用设置 +// +---------------------------------------------------------------------- - // 应用命名空间 - 'app_namespace' => 'app', +return [ + // 应用名称 + 'app_name' => '', + // 应用地址 + 'app_host' => '', // 应用调试模式 - 'app_debug' => true, + 'app_debug' => false, // 应用Trace 'app_trace' => false, - // 应用模式状态 - 'app_status' => '', // 是否支持多模块 'app_multi_module' => true, // 入口自动绑定模块 'auto_bind_module' => false, // 注册的根命名空间 'root_namespace' => [], - // 扩展函数文件 - 'extra_file_list' => [THINK_PATH . 'helper' . EXT], // 默认输出类型 'default_return_type' => 'html', // 默认AJAX 数据返回格式,可选json xml ... @@ -39,7 +37,7 @@ return [ // 默认JSONP处理方法 'var_jsonp_handler' => 'callback', // 默认时区 - 'default_timezone' => 'PRC', + 'default_timezone' => 'Asia/Shanghai', // 是否开启多语言 'lang_switch_on' => false, // 默认全局过滤方法 用逗号分隔多个 @@ -65,8 +63,12 @@ return [ 'default_action' => 'index', // 默认验证器 'default_validate' => '', + // 默认的空模块名 + 'empty_module' => '', // 默认的空控制器名 'empty_controller' => 'Error', + // 操作方法前缀 + 'use_action_prefix' => false, // 操作方法后缀 'action_suffix' => '', // 自动搜索控制器 @@ -82,22 +84,26 @@ return [ 'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'], // pathinfo分隔符 'pathinfo_depr' => '/', + // HTTPS代理标识 + 'https_agent_name' => '', + // IP代理获取标识 + 'http_agent_ip' => 'X-REAL-IP', // URL伪静态后缀 'url_html_suffix' => 'html', // URL普通方式参数 用于自动生成 'url_common_param' => false, // URL参数方式 0 按名称成对解析 1 按顺序解析 'url_param_type' => 0, - // 是否开启路由 - 'url_route_on' => true, - // 路由使用完整匹配 - 'route_complete_match' => false, - // 路由配置文件(支持配置多个) - 'route_config_file' => ['route'], + // 是否开启路由延迟解析 + 'url_lazy_route' => false, // 是否强制使用路由 'url_route_must' => false, - // 域名部署 - 'url_domain_deploy' => false, + // 合并路由规则 + 'route_rule_merge' => false, + // 路由是否完全匹配 + 'route_complete_match' => false, + // 使用注解路由 + 'route_annotation' => false, // 域名根,如thinkphp.cn 'url_domain_root' => '', // 是否自动转换URL中的控制器和操作名 @@ -114,42 +120,21 @@ return [ 'request_cache' => false, // 请求缓存有效期 'request_cache_expire' => null, + // 全局请求缓存排除规则 + 'request_cache_except' => [], + // 是否开启路由缓存 + 'route_check_cache' => false, + // 路由缓存的Key自定义设置(闭包),默认为当前URL和请求类型的md5 + 'route_check_cache_key' => '', + // 路由缓存类型及参数 + 'route_cache_option' => [], - // +---------------------------------------------------------------------- - // | 模板设置 - // +---------------------------------------------------------------------- - - 'template' => [ - // 模板引擎类型 支持 php think 支持扩展 - 'type' => 'Think', - // 模板路径 - 'view_path' => '', - // 模板后缀 - 'view_suffix' => 'html', - // 模板文件名分隔符 - 'view_depr' => DS, - // 模板引擎普通标签开始标记 - 'tpl_begin' => '{', - // 模板引擎普通标签结束标记 - 'tpl_end' => '}', - // 标签库标签开始标记 - 'taglib_begin' => '{', - // 标签库标签结束标记 - 'taglib_end' => '}', - ], - - // 视图输出字符串内容替换 - 'view_replace_str' => [], // 默认跳转页面对应的模板文件 - 'dispatch_success_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl', - 'dispatch_error_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl', - - // +---------------------------------------------------------------------- - // | 异常及错误设置 - // +---------------------------------------------------------------------- + 'dispatch_success_tmpl' => Env::get('think_path') . 'tpl/dispatch_jump.tpl', + 'dispatch_error_tmpl' => Env::get('think_path') . 'tpl/dispatch_jump.tpl', // 异常页面的模板文件 - 'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl', + 'exception_tmpl' => Env::get('think_path') . 'tpl/think_exception.tpl', // 错误显示信息,非调试模式有效 'error_message' => '页面错误!请稍后再试~', @@ -158,82 +143,4 @@ return [ // 异常处理handle类 留空使用 \think\exception\Handle 'exception_handle' => '', - // +---------------------------------------------------------------------- - // | 日志设置 - // +---------------------------------------------------------------------- - - 'log' => [ - // 日志记录方式,内置 file socket 支持扩展 - 'type' => 'File', - // 日志保存目录 - 'path' => LOG_PATH, - // 日志记录级别 - 'level' => [], - ], - - // +---------------------------------------------------------------------- - // | Trace设置 开启 app_trace 后 有效 - // +---------------------------------------------------------------------- - 'trace' => [ - // 内置Html Console 支持扩展 - 'type' => 'Html', - ], - - // +---------------------------------------------------------------------- - // | 缓存设置 - // +---------------------------------------------------------------------- - - 'cache' => [ - // 驱动方式 - 'type' => 'File', - // 缓存保存目录 - 'path' => CACHE_PATH, - // 缓存前缀 - 'prefix' => '', - // 缓存有效期 0表示永久缓存 - 'expire' => 0, - ], - - // +---------------------------------------------------------------------- - // | 会话设置 - // +---------------------------------------------------------------------- - - 'session' => [ - 'id' => '', - // SESSION_ID的提交变量,解决flash上传跨域 - 'var_session_id' => '', - // SESSION 前缀 - 'prefix' => 'think', - // 驱动方式 支持redis memcache memcached - 'type' => '', - // 是否自动开启 SESSION - 'auto_start' => true, - ], - - // +---------------------------------------------------------------------- - // | Cookie设置 - // +---------------------------------------------------------------------- - 'cookie' => [ - // cookie 名称前缀 - 'prefix' => '', - // cookie 保存时间 - 'expire' => 0, - // cookie 保存路径 - 'path' => '/', - // cookie 有效域名 - 'domain' => '', - // cookie 启用安全传输 - 'secure' => false, - // httponly设置 - 'httponly' => '', - // 是否使用 setcookie - 'setcookie' => true, - ], - - //分页配置 - 'paginate' => [ - 'type' => 'bootstrap', - 'var_page' => 'page', - 'list_rows' => 15, - ], ]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000000000000000000000000000000000000..985dbb1c480bd612d18bb6945151396f7216616a --- /dev/null +++ b/config/cache.php @@ -0,0 +1,25 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 缓存设置 +// +---------------------------------------------------------------------- + +return [ + // 驱动方式 + 'type' => 'File', + // 缓存保存目录 + 'path' => '', + // 缓存前缀 + 'prefix' => '', + // 缓存有效期 0表示永久缓存 + 'expire' => 0, +]; diff --git a/config/console.php b/config/console.php new file mode 100644 index 0000000000000000000000000000000000000000..a7fabcaa8a5c75729d8c068550b9d303f2ffa749 --- /dev/null +++ b/config/console.php @@ -0,0 +1,20 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 控制台配置 +// +---------------------------------------------------------------------- +return [ + 'name' => 'Think Console', + 'version' => '0.1', + 'user' => null, + 'auto_path' => env('app_path') . 'command' . DIRECTORY_SEPARATOR, +]; diff --git a/config/cookie.php b/config/cookie.php new file mode 100644 index 0000000000000000000000000000000000000000..1de07082a6c0a48f5b8cad6b798eef1f3310bfbc --- /dev/null +++ b/config/cookie.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | Cookie设置 +// +---------------------------------------------------------------------- +return [ + // cookie 名称前缀 + 'prefix' => '', + // cookie 保存时间 + 'expire' => 0, + // cookie 保存路径 + 'path' => '/', + // cookie 有效域名 + 'domain' => '', + // cookie 启用安全传输 + 'secure' => false, + // httponly设置 + 'httponly' => '', + // 是否使用 setcookie + 'setcookie' => true, +]; diff --git a/application/database.php b/config/database.php similarity index 83% rename from application/database.php rename to config/database.php index 4caac2f14a68cb3cb4741a406a24743ba48f904b..d14b9524270e753523927f5ee816fe4d3e1c1b13 100644 --- a/application/database.php +++ b/config/database.php @@ -2,7 +2,7 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- @@ -40,6 +40,8 @@ return [ 'master_num' => 1, // 指定从服务器序号 'slave_no' => '', + // 自动读取主库数据 + 'read_master' => false, // 是否严格检查字段是否存在 'fields_strict' => true, // 数据集返回类型 @@ -50,4 +52,12 @@ return [ 'datetime_format' => 'Y-m-d H:i:s', // 是否需要进行SQL性能分析 'sql_explain' => false, + // Builder类 + 'builder' => '', + // Query类 + 'query' => '\\think\\db\\Query', + // 是否需要断线重连 + 'break_reconnect' => false, + // 断线标识字符串 + 'break_match_str' => [], ]; diff --git a/config/log.php b/config/log.php new file mode 100644 index 0000000000000000000000000000000000000000..b3d87b4a9481401cb8724f313c170954e5de2ec9 --- /dev/null +++ b/config/log.php @@ -0,0 +1,30 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 日志设置 +// +---------------------------------------------------------------------- +return [ + // 日志记录方式,内置 file socket 支持扩展 + 'type' => 'File', + // 日志保存目录 + 'path' => '', + // 日志记录级别 + 'level' => [], + // 单文件日志写入 + 'single' => false, + // 独立日志级别 + 'apart_level' => [], + // 最大日志文件数量 + 'max_files' => 0, + // 是否关闭日志写入 + 'close' => false, +]; diff --git a/config/middleware.php b/config/middleware.php new file mode 100644 index 0000000000000000000000000000000000000000..fe15ec3d9400f6e00e919d3b2171c4a1c3aaa032 --- /dev/null +++ b/config/middleware.php @@ -0,0 +1,18 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 中间件配置 +// +---------------------------------------------------------------------- +return [ + // 默认中间件命名空间 + 'default_namespace' => 'app\\http\\middleware\\', +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000000000000000000000000000000000000..1d7b6c60f5f47756901ddfd6cbbc272e27e690a0 --- /dev/null +++ b/config/session.php @@ -0,0 +1,26 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 会话设置 +// +---------------------------------------------------------------------- + +return [ + 'id' => '', + // SESSION_ID的提交变量,解决flash上传跨域 + 'var_session_id' => '', + // SESSION 前缀 + 'prefix' => 'think', + // 驱动方式 支持redis memcache memcached + 'type' => '', + // 是否自动开启 SESSION + 'auto_start' => true, +]; diff --git a/config/template.php b/config/template.php new file mode 100644 index 0000000000000000000000000000000000000000..299bd6f43e990055f30a4c2e0e6203edf2ceffe6 --- /dev/null +++ b/config/template.php @@ -0,0 +1,35 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | 模板设置 +// +---------------------------------------------------------------------- + +return [ + // 模板引擎类型 支持 php think 支持扩展 + 'type' => 'Think', + // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法 + 'auto_rule' => 1, + // 模板路径 + 'view_path' => '', + // 模板后缀 + 'view_suffix' => 'html', + // 模板文件名分隔符 + 'view_depr' => DIRECTORY_SEPARATOR, + // 模板引擎普通标签开始标记 + 'tpl_begin' => '{', + // 模板引擎普通标签结束标记 + 'tpl_end' => '}', + // 标签库标签开始标记 + 'taglib_begin' => '{', + // 标签库标签结束标记 + 'taglib_end' => '}', +]; diff --git a/config/trace.php b/config/trace.php new file mode 100644 index 0000000000000000000000000000000000000000..425d30148dcdd4cf62c4ff78132637966ccacaea --- /dev/null +++ b/config/trace.php @@ -0,0 +1,18 @@ + +// +---------------------------------------------------------------------- + +// +---------------------------------------------------------------------- +// | Trace设置 开启 app_trace 后 有效 +// +---------------------------------------------------------------------- +return [ + // 内置Html Console 支持扩展 + 'type' => 'Html', +]; diff --git a/public/index.php b/public/index.php index 6b7ec30e0f2a31842df31e99dfc7a7a3ae74b8a2..22dc158365b3ff360bc146c5f51cae906f0d58f1 100644 --- a/public/index.php +++ b/public/index.php @@ -2,7 +2,7 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- @@ -10,8 +10,12 @@ // +---------------------------------------------------------------------- // [ 应用入口文件 ] +namespace think; -// 定义应用目录 -define('APP_PATH', __DIR__ . '/../application/'); -// 加载框架引导文件 -require __DIR__ . '/../thinkphp/start.php'; +// 加载基础文件 +require __DIR__ . '/../thinkphp/base.php'; + +// 支持事先使用静态方法设置Request对象和Config对象 + +// 执行应用并响应 +Container::get('app')->run()->send(); diff --git a/public/router.php b/public/router.php index 6ba1fabf9febbf88a6796b02c6a92c8c9be7e254..4f916b4079c4bcbe9ac64d04331cd2bc4cae6bfe 100644 --- a/public/router.php +++ b/public/router.php @@ -2,7 +2,7 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- @@ -10,7 +10,7 @@ // +---------------------------------------------------------------------- // $Id$ -if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["REQUEST_URI"])) { +if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) { return false; } else { require __DIR__ . "/index.php"; diff --git a/application/route.php b/route/route.php similarity index 65% rename from application/route.php rename to route/route.php index f648d3b4ead0af6c74c91c6d95bd1268771d65ca..6f479d30e0a38dfe7b817fa7c5e8969038867988 100644 --- a/application/route.php +++ b/route/route.php @@ -2,20 +2,19 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006~2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: liu21st // +---------------------------------------------------------------------- +Route::get('think', function () { + return 'hello,ThinkPHP5!'; +}); + +Route::get('hello/:name', 'index/hello'); + return [ - '__pattern__' => [ - 'name' => '\w+', - ], - '[hello]' => [ - ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']], - ':name' => ['index/hello', ['method' => 'post']], - ], ]; diff --git a/think b/think index 8afa938affcc48dc7171fe9ab78d5e32ea25e9c6..6a923b354081654c3f607a048c45e8ef8d733b25 100644 --- a/think +++ b/think @@ -3,15 +3,20 @@ // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK ] // +---------------------------------------------------------------------- -// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved. +// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: yunwuxin <448901948@qq.com> // +---------------------------------------------------------------------- -// 定义项目路径 -define('APP_PATH', __DIR__ . '/application/'); +namespace think; -// 加载框架引导文件 -require './thinkphp/console.php'; \ No newline at end of file +// 加载基础文件 +require __DIR__ . '/thinkphp/base.php'; + +// 应用初始化 +Container::get('app')->path(__DIR__ . '/application/')->initialize(); + +// 控制台初始化 +Console::init(); \ No newline at end of file