浏览代码

first commit

Your Name 6 个月前
当前提交
0cfebc30b6

+ 7
- 0
.gitignore 查看文件

@@ -0,0 +1,7 @@
1
+/.idea
2
+/.vscode
3
+/vendor
4
+*.log
5
+thinkphp
6
+.env
7
+.DS_Store

+ 42
- 0
.travis.yml 查看文件

@@ -0,0 +1,42 @@
1
+sudo: false
2
+
3
+language: php
4
+
5
+branches:
6
+  only:
7
+    - stable
8
+
9
+cache:
10
+  directories:
11
+    - $HOME/.composer/cache
12
+
13
+before_install:
14
+  - composer self-update
15
+
16
+install:
17
+  - composer install --no-dev --no-interaction --ignore-platform-reqs
18
+  - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Core.zip .
19
+  - composer require --update-no-dev --no-interaction "topthink/think-image:^1.0"
20
+  - composer require --update-no-dev --no-interaction "topthink/think-migration:^1.0"
21
+  - composer require --update-no-dev --no-interaction "topthink/think-captcha:^1.0"
22
+  - composer require --update-no-dev --no-interaction "topthink/think-mongo:^1.0"
23
+  - composer require --update-no-dev --no-interaction "topthink/think-worker:^1.0"
24
+  - composer require --update-no-dev --no-interaction "topthink/think-helper:^1.0"
25
+  - composer require --update-no-dev --no-interaction "topthink/think-queue:^1.0"
26
+  - composer require --update-no-dev --no-interaction "topthink/think-angular:^1.0"
27
+  - composer require --dev --update-no-dev --no-interaction "topthink/think-testing:^1.0"
28
+  - zip -r --exclude='*.git*' --exclude='*.zip' --exclude='*.travis.yml' ThinkPHP_Full.zip .
29
+
30
+script:
31
+  - php think unit
32
+
33
+deploy:
34
+  provider: releases
35
+  api_key:
36
+    secure: TSF6bnl2JYN72UQOORAJYL+CqIryP2gHVKt6grfveQ7d9rleAEoxlq6PWxbvTI4jZ5nrPpUcBUpWIJHNgVcs+bzLFtyh5THaLqm39uCgBbrW7M8rI26L8sBh/6nsdtGgdeQrO/cLu31QoTzbwuz1WfAVoCdCkOSZeXyT/CclH99qV6RYyQYqaD2wpRjrhA5O4fSsEkiPVuk0GaOogFlrQHx+C+lHnf6pa1KxEoN1A0UxxVfGX6K4y5g4WQDO5zT4bLeubkWOXK0G51XSvACDOZVIyLdjApaOFTwamPcD3S1tfvuxRWWvsCD5ljFvb2kSmx5BIBNwN80MzuBmrGIC27XLGOxyMerwKxB6DskNUO9PflKHDPI61DRq0FTy1fv70SFMSiAtUv9aJRT41NQh9iJJ0vC8dl+xcxrWIjU1GG6+l/ZcRqVx9V1VuGQsLKndGhja7SQ+X1slHl76fRq223sMOql7MFCd0vvvxVQ2V39CcFKao/LB1aPH3VhODDEyxwx6aXoTznvC/QPepgWsHOWQzKj9ftsgDbsNiyFlXL4cu8DWUty6rQy8zT2b4O8b1xjcwSUCsy+auEjBamzQkMJFNlZAIUrukL/NbUhQU37TAbwsFyz7X0E/u/VMle/nBCNAzgkMwAUjiHM6FqrKKBRWFbPrSIixjfjkCnrMEPw=
37
+  file:
38
+    - ThinkPHP_Core.zip
39
+    - ThinkPHP_Full.zip
40
+  skip_cleanup: true
41
+  on:
42
+    tags: true

+ 946
- 0
CHANGELOG.md 查看文件

@@ -0,0 +1,946 @@
1
+## V5.1.41 LTS(2021-1-11)
2
+
3
+本版本为PHP8兼容更新
4
+
5
+## V5.1.40 LTS(2020-10-09)
6
+本版本为常规更新,主要包括:
7
+* 改进redis驱动`has`方法
8
+* 修正XA事务
9
+* 修正`HasManyThrough`关联
10
+* 增加mysql json类型字段->>方式获取支持
11
+* 改进路由加载 避免加载编辑器临时文件影响
12
+* 修复关联模型的属性直接附加到当前模型,当关联模型字段名为name时获取的值为模型的属性name值
13
+* 修复多态关联预加载`field`无效
14
+* 改进Collection类的`column`方法的PHP兼容性问题
15
+* 改进mysql驱动
16
+* 改进`parseclosure`方法
17
+* SoftDelete删除条件做空判断
18
+* 改进验证类`append`方法
19
+
20
+## V5.1.39 LTS(2019-11-18)
21
+
22
+本次更新为常规更新,主要包括:
23
+
24
+* 修正`memcached`驱动
25
+* 改进`HasManyThrough`关联查询
26
+* 改进`Request`类`isJson`方法
27
+* 改进关联查询
28
+* 改进`redis`驱动
29
+* 增加 Model类`getWhere`方法对复合主键的支持
30
+* 改进`newQuery`方法
31
+* 改进闭包查询的参数绑定
32
+* 修正`Validate`
33
+* 修复某些情况下URL会多一个冒号
34
+* 调整composer.json
35
+* 修复使用`Cache::clear()`时,报错缓存文件不存在问题
36
+* 使用File类的unlink方法进行文件删除
37
+* 改进`paraseData`方法
38
+* 修正image验证方法
39
+* 改进Url生成
40
+* 改进空操作对数字的支持
41
+* 改进一处PHP7.4兼容性问题
42
+
43
+## V5.1.38 LTS(2019-8-8)
44
+
45
+本次更新为常规更新,主要包括:
46
+
47
+* `Request`类增加`isJson`方法
48
+* 改进浮点型查询
49
+* 修正关联查询关联外键为空的查询错误
50
+* 远程一对多支持关联统计和预载入查询
51
+* 远程一对多关联支持`has`/`hasWhere`查询
52
+* 优化`parseIn`解析
53
+* 改进`parseLike`查询
54
+* 改进Url生成
55
+* 改进模型的`toArray`方法
56
+* 修正`notIn`查询
57
+* 改进`JSON`字段查询
58
+* 改进Controller类`display`/`fetch`方法返回`ViewResponse`对象
59
+* 改进`param`方法
60
+* 改进`mysql`驱动`getExplain`方法
61
+* 改进时间查询
62
+* 改进模型关联的`has`/`hasWhere`方法对软删除的支持
63
+* 修正社区反馈的BUG
64
+
65
+## V5.1.37 LTS(2019-5-26)
66
+
67
+本次更新为常规更新,主要更新如下:
68
+
69
+* 改进关联数据更新
70
+* 修正关联动态获取器
71
+* 改进`redis`驱动 
72
+* 修复验证规则里面出现二维数组时的错误
73
+* 改进跨域请求支持
74
+* 完善模型`hidden`方法对关联属性的支持
75
+* 改进`where`查询方法传入`Query`对象的支持`bind`数据
76
+* 改进数据集对象的`load`方法
77
+* 修正缓存类`clear`方法对`tag`的支持
78
+
79
+## V5.1.36 LTS(2019-4-28)
80
+
81
+本次更新为常规更新,主要更新如下:
82
+
83
+* 修正`chunk`方法一处异常抛出的错误
84
+* 修正模型输出的`visible`
85
+* 改进环境变量加载
86
+* 改进命令行日志的`level`配置支持
87
+* 修复设置有缓存前缀时,无法清空缓存标签的问题
88
+* HasMony对象`saveAll`方法兼容`Collection`格式参数格式
89
+* 修正`whereOr`查询使用字符串的问题
90
+* 改进`dateFormat`设置对写入数据的影响
91
+* 修正查询缓存
92
+* 记住指定的跳转地址
93
+* 改进软删除
94
+* 改进聚合查询SQL去除limit 1
95
+* 改进缓存驱动
96
+
97
+## V5.1.35 LTS(2019-3-2)
98
+
99
+本次主要为常规更新,修正了一些反馈的问题。
100
+
101
+* 修正验证类自定义验证方法执行两次的问题
102
+* 模型增加`isEmpty`方法用于判断是否空模型
103
+* 改进获取器对`append`的支持
104
+* 修正一对多关联的`withCount`自关联问题
105
+* facade类注释调整
106
+* 改进关联属性的`visible`和`hidden`判断
107
+* 修正路由分组的`MISS`路由
108
+* 改进pgsql.sql
109
+
110
+## V5.1.34 LTS(2019-1-30)
111
+
112
+本次更新为常规更新,修正了一些反馈的问题。
113
+
114
+* 改进Request类的`has`方法,支持`patch`
115
+* 改进`unique`验证的多条件支持
116
+* 修复自定义上传验证,检测文件大小
117
+* 改进`in`查询支持表达式
118
+* 改进路由的`getBind`方法
119
+* 改进验证类的错误信息获取
120
+* 改进`response`助手函数默认值
121
+* 修正mysql的`regexp`查询
122
+* 改进模型类型强制转换写入对`Expression`对象的支持
123
+
124
+## V5.1.33 LTS(2019-1-16)
125
+
126
+* 修复路由中存在多个相同替换的正则BUG
127
+* 修正whereLike查询
128
+* join方法支持参数绑定
129
+* 改进union方法
130
+* 修正多对多关联的attach方法
131
+* 改进验证类的正则规则自定义
132
+* 改进Request类method方法
133
+* 改进File日志类型的CLI日志写入
134
+* 改进文件日志time_format配置对JSON格式的支持
135
+
136
+## V5.1.32 LTS(2018-12-24)
137
+
138
+本次主要为常规更新,修正了一些反馈的问题。
139
+
140
+
141
+* 改进多对多关联的`attach`方法 
142
+* 改进聚合查询的`field`处理
143
+* 改进关联的`save`方法
144
+* 修正模型`exists`方法返回值
145
+* 改进时间字段写入和输出
146
+* 改进控制器中间件的调用
147
+* 改进路由变量替换的性能
148
+* 改进缓存标签的处理机制
149
+
150
+## V5.1.31 LTS (2018-12-9)
151
+
152
+本次版本包含一个安全更新,建议升级。
153
+
154
+* 改进`field`方法
155
+* 改进`count`方法返回类型
156
+* `download`函数增加在浏览器中显示文件功能
157
+* 修正多对多模型的中间表数据写入
158
+* 改进`sqlsrv`驱动支持多个Schemas模式查询
159
+* 统一助手函数与\think\response\Download函数文件过期时间
160
+* 完善关联模型的`save`方法 增加`make`方法仅创建对象不保存
161
+* 修改条件表达式对静态变量的支持
162
+* 修正控制器名获取
163
+* 改进view方法的`field`解析
164
+
165
+## V5.1.30 LTS(2018-11-30)
166
+
167
+该版本为常规更新,修正了一些社区反馈的问题。
168
+
169
+主要更新如下:
170
+
171
+* 改进查询类的`execute`方法
172
+* 判断路由规则定义添加对请求类型的判断
173
+* 修复`orderRaw`异常
174
+* 修正 `optimize:autoload`指令
175
+* 改进软删除的`destroy`方法造成重复执行事件的问题
176
+* 改进验证类对扩展验证规则 始终验证 不管是否`require`
177
+* 修复自定义验证`remove`所有规则的异常
178
+* 改进时间字段的自动写入支持微秒数据
179
+* 改进`Connection`类的`getrealsql`方法
180
+* 修正`https`地址的URL生成
181
+* 修复 `array_walk_recursive` 在低于PHP7.1消耗内部指针问题
182
+* 改进手动参数绑定使用
183
+* 改进聚合查询方法的`field`参数支持`Expression`
184
+
185
+## V5.1.29 LTS(2018-11-11)
186
+
187
+该版本主要改进了参数绑定的解析问题和提升性能,并修正了一些反馈的问题。
188
+
189
+* 改进手动参数绑定
190
+* 修正MISS路由的分组参数无效问题
191
+* 行为支持对象的方法
192
+* 修正全局查询范围
193
+* 改进`belongsto`关联的`has`方法
194
+* 改进`hasMany`关联
195
+* 改进模型观察者多次注册的问题
196
+* 改进`query`类的默认查询参数处理
197
+* 修正`parseBetween`解析方法
198
+* 改进路由地址生成的本地域名支持
199
+* 改进参数绑定的实际URL解析性能
200
+* 改进`Env`类的`getEnv`和`get`方法
201
+* 改进模板缓存的生成优化
202
+* 修复验证类的多语言支持
203
+* 修复自定义场景验证`remove`规则异常
204
+* File类添加是否自动补全扩展名的选项
205
+* 改进`strpos`对子串是否存在的判断
206
+* 修复`choice`无法用值选择第一个选项问题
207
+* 验证器支持多维数组取值验证
208
+* 改进解析`extend`和`block`标签的正则
209
+
210
+## V5.1.28 LTS(2018-10-29)
211
+
212
+该版本主要修正了上一个版本存在的一些问题,并改进了关联查询
213
+
214
+* 改进聚合查询方法的字段支持DISTINCT
215
+* 改进定义路由后url函数的端口生成
216
+* 改进控制器中间件对`swoole`等的支持
217
+* 改进Log类`save`方法
218
+* 改进验证类的闭包验证参数
219
+* 多对多关联支持指定中间表数据的名称
220
+* 关联聚合查询支持闭包方式指定聚合字段
221
+* 改进Lang类`get`方法
222
+* 多对多关联增加判断关联数据是否存在的方法
223
+* 改进关联查询使用`fetchsql`的情况
224
+* 改进修改器的是否已经执行判断
225
+* 增加`afterWith`和`beforeWith`验证规则 用于比较日期字段
226
+
227
+## V5.1.27 LTS(2018-10-22)
228
+
229
+该版本主要修正了路由绑定的参数,改进了修改器的执行多次问题,并正式宣布为LTS版本!
230
+
231
+
232
+* 修正路由绑定的参数丢失问题
233
+* 修正路由别名的参数获取
234
+* 改进修改器会执行多次的问题
235
+
236
+## V5.1.26(2018-10-12)
237
+
238
+该版本主要修正了上一个版本的一些问题,并改进了全局查询范围的支持,同时包含了一个安全更新。
239
+
240
+
241
+* 修正单一模块下注解路由无效的问题
242
+* 改进数据库的聚合查询的字段处理
243
+* 模型类增加`globalScope`属性定义 用于指定全局的查询范围
244
+* 模型的`useGlobalScope`方法支持传入数组 用于指定当前查询需要使用的全局查询范围
245
+* 改进数据集的`order`方法对数字类型的支持
246
+* 修正上一个版本`order`方法解析的一处BUG
247
+* 排序字段不合法或者错误的时候抛出异常
248
+* 改进`Request`类的`file`方法对上传文件的错误判断
249
+
250
+##  V5.1.25(2018-9-21)
251
+
252
+该版本主要改进了查询参数绑定的性能和对浮点型的支持,以及一些细节的完善。
253
+
254
+* 修正一处命令行问题
255
+* 改进`Socketlog`日志驱动,支持自定义默认展开日志类别
256
+* 修正`MorphMany`一处bug
257
+* 跳转到上次记住的url,并支持默认值
258
+* 改进模型的异常提示
259
+* 改进参数绑定对浮点型的支持
260
+* 改进`order`方法解析
261
+* 改进`json`字段数据的自动编码
262
+* 改进日志`log_write`可能造成的日志写入死循环
263
+* Log类增加`log_level`行为标签位置,用于对某个类型的日志进行处理
264
+* Route类增加`clear`方法清空路由规则
265
+* 分布式数据库配置支持使用数组
266
+* 单日志文件也支持`max_files`参数
267
+* 改进查询参数绑定的性能
268
+* 改进别名路由的URL后缀参数检测
269
+* 控制器前置方法和控制器中间件的`only`和`except`定义不区分大小写
270
+
271
+## V5.1.24(2018-9-5)
272
+
273
+该版本主要增加了命令行的表格输出功能,并增加了查看路由定义的指令,以及修正了社区的一些反馈问题。
274
+
275
+* 修正`Request`类的`file`方法
276
+* 修正路由的`cache`方法
277
+* 修正路由缓存的一处问题
278
+* 改进上传文件获取的异常处理
279
+* 改进`fetchCollection`方法支持传入数据集类名
280
+* 修正多级控制器的注解路由生成
281
+* 改进`Middleware`类`clear`方法
282
+* 增加`route:list`指令用于[查看定义的路由](752690) 并支持排序
283
+* 命令行增加`Table`输出类
284
+* `Command`类增加`table`方法用于输出表格
285
+* 改进搜索器查询方法支持别名定义
286
+* 命令行配置增加`auto_path`参数用于定义自动载入的命令类路径
287
+* 增加`make:command`指令用于[快速生成指令](354146)
288
+* 改进`make:controller`指令对操作方法后缀的支持
289
+* 改进命令行的定义文件支持索引数组 用于指令对象的惰性加载
290
+* 改进`value`和`column`方法对后续查询结果的影响
291
+* 改进`RuleName`类的`setRule`方法
292
+
293
+## V5.1.23(2018-8-23)
294
+
295
+该版本主要改进了数据集对象的处理,增加了`findOrEmpty`方法,并且修正了一些社区反馈的BUG。
296
+
297
+* 数据集类增加`diff`/`intersect`方法用于获取差集和交集(默认根据主键值比较)
298
+* 数据集类增加`order`方法支持指定字段排序
299
+* 数据集类增加`map`方法使用回调函数处理数据并返回新的数据集对象
300
+* Db增加`allowEmpty`方法允许`find`方法在没有数据的时候返回空数组或者空模型对象而不是null
301
+* Db增加`findOrEmpty`方法
302
+* Db增加`fetchCollection`方法用于指定查询返回数据集对象
303
+* 改进`order`方法的数组方式解析,增强安全性
304
+* 改进`withSearch`方法,支持第三个参数传入字段前缀标识,用于多表查询字段搜索
305
+* 修正`optimize:route`指令开启类库后缀后的注解路由生成
306
+* 修正redis缓存及session驱动
307
+* 支持指定`Yaconf`的独立配置文件
308
+* 增加`yaconf`助手函数用于配置文件
309
+
310
+
311
+## V5.1.22(2018-8-9)
312
+
313
+该版本主要增加了模型搜索器和`withJoin`方法,完善了模型输出和对`Yaconf`的支持,修正了一些社区反馈的BUG。
314
+
315
+* 改进一对一关联的`table`识别问题
316
+* 改进内置`Facade`类
317
+* 增加`withJoin`方法支持`join`方式的[一对一关联](一对一关联.md)查询
318
+* 改进`join`预载入查询的空数据问题
319
+* 改进`Config`类的`load`方法支持快速加载配置文件
320
+* 改进`execute`方法和事务的断线重连
321
+* 改进`memcache`驱动的`has`方法
322
+* 模型类支持定义[搜索器](搜索器.md)方法
323
+* 完善`Config`类对`Yaconf`的支持
324
+* 改进模型的`hidden/visible/append/withAttr`方法,支持在[查询前后调用](数组访问.md),以及支持数据集对象
325
+* 数据集对象增加`where`方法根据字段或者关联数据[过滤数据](模型数据集.md)
326
+* 改进AJAX请求的`204`判断
327
+
328
+
329
+## V5.1.21(2018-8-2)
330
+
331
+该版本主要增加了下载响应对象和数组查询对象的支持,并修正了一些社区反馈的问题。
332
+
333
+* 改进核心对象的无用信息调试输出
334
+* 改进模型的`isRelationAttr`方法判断
335
+* 模型类的`get`和`all`方法并入Db类
336
+* 增加[下载响应对象](文件下载.md)和`download`助手函数
337
+* 修正别名路由配置定义读取
338
+* 改进`resultToModel`方法
339
+* 修正开启类库后缀后的注解路由生成
340
+* `Response`类增加`noCache`快捷方法
341
+* 改进路由对象在`Swoole`/`Workerman`下面参数多次合并问题
342
+* 修正路由`ajax`/`pjax`参数后路由变量无法正确获取的问题
343
+* 增加清除中间件的方法
344
+* 改进依赖注入的参数规范自动识别(便于对接前端小写+下划线规范)
345
+* 改进`hasWhere`的数组条件的字段判断
346
+* 增加[数组查询对象](高级查询.md)`Where`支持(喜欢数组查询的福音)
347
+* 改进多对多关联的闭包支持
348
+
349
+## V5.1.20(2018-7-25)
350
+
351
+该版本主要增加了Db和模型的动态获取器的支持,并修正了一些已知问题。
352
+
353
+* Db类添加[获取器支持](703981)
354
+* 支持模型及关联模型字段[动态定义获取器](354046)
355
+* 动态获取器支持`JSON`字段
356
+* 改进路由的`before`行为执行(匹配后执行)
357
+*  `Config`类支持`Yaconf`
358
+* 改进Url生成的端口问题
359
+* Request类增加`setUrl`和`setBaseUrl`方法
360
+* 改进页面trace的信息显示
361
+* 修正`MorphOne`关联
362
+* 命令行添加[查看版本指令](703994)
363
+
364
+## V5.1.19 (2018-7-13)
365
+
366
+该版本是一个小幅改进版本,针对`Swoole`和`Workerman`的`Cookie`支持做了一些改进,并修正了一些已知的问题。
367
+
368
+
369
+* 改进query类`delete`方法对软删除条件判断
370
+* 修正分表查询的软删除问题
371
+* 模型查询的时候同时传入`table`和`name`属性
372
+* 容器类增加`IteratorAggregate`和`Countable`接口支持
373
+* 路由分组支持对下面的资源路由统一设置`only/except/vars`参数
374
+* 改进Cookie类更好支持扩展
375
+* 改进Request类`post`方法
376
+* 改进模型自关联的自动识别
377
+* 改进Request类对`php://input`数据的处理
378
+
379
+
380
+## V5.1.18 (2018-6-30)
381
+
382
+该版本主要完善了对`Swoole`和`Workerman`的`HttpServer`运行支持,改进`Request`类,并修正了一些已知的问题。
383
+
384
+* 改进关联`append`方法的处理
385
+* 路由初始化和检测方法分离
386
+* 修正`destroy`方法强制删除
387
+* `app_init`钩子位置移入`run`方法
388
+* `think-swoole`扩展更新到2.0版本
389
+* `think-worker`扩展更新到2.0版本
390
+* 改进Url生成的域名自动识别
391
+* `Request`类增加`setPathinfo`方法和`setHost`方法
392
+* `Request`类增加`withGet`/`withPost`/`withHeader`/`withServer`/`withCookie`/`withEnv`方法进行赋值操作
393
+* Route类改进`host`属性的获取
394
+* 解决注解路由配置不生效的问题
395
+* 取消Test日志驱动,改为使用`close`设置关闭全局日志写入
396
+* 修正路由的`response`参数
397
+* 修正204响应输出的判断
398
+
399
+## V5.1.17 (2018-6-18)
400
+
401
+该版本主要增加了控制器中间件的支持,改进了路由功能,并且修正了社区反馈的一些问题。
402
+
403
+* 修正软删除的`delete`方法
404
+* 修正Query类`Count`方法
405
+* 改进多对多`detach`方法
406
+* 改进Request类`Session`方法
407
+* 增加控制器中间件支持
408
+* 模型类增加`jsonAssoc`属性用于定义json数据是否返回数组
409
+* 修正Request类`method`方法的请求伪装
410
+* 改进静态路由的匹配
411
+* 分组首页路由自动完整匹配
412
+* 改进sqlsrv的`column`方法
413
+* 日志类的`apart_level`配置支持true自动生成对应类型的日志文件
414
+* 改进`204`输出判断
415
+* 修正cli下页面输出的BUG
416
+* 验证类使用更高效的`ctype`验证机制
417
+* 改进Request类`cookie`方法
418
+* 修正软删除的`withTrashed`方法
419
+* 改进多态一对多的预载入查询
420
+* 改进Query类`column`方法的缓存读取
421
+* Query类增加`whereBetweenTimeField`方法
422
+* 改进分组下多个相同路由规则的合并匹配问题
423
+* 路由类增加`getRule`/`getRuleList`方法获取定义的路由
424
+
425
+## V5.1.16 (2018-6-7)
426
+
427
+该版本主要修正了社区反馈的一些问题,并对Request类做了进一步规范和优化。
428
+
429
+* 改进Session类的`boot`方法
430
+* App类的初始化方法可以单独执行
431
+* 改进Request类的`param`方法
432
+* 改进资源路由的变量替换
433
+* Request类增加`__isset`方法
434
+* 改进`useGlobalScope`方法对软删除的影响
435
+* 修正命令行调用
436
+* 改进Cookie类`init`方法
437
+* 改进多对多关联删除的返回值
438
+* 一对多关联写入支持`replace`
439
+* 路由增加`filter`检测方法,用于通过请求参数检测路由是否匹配
440
+* 取消Request类`session/env/server`方法的`filter`参数
441
+* 改进关联的指定属性输出
442
+* 模型删除操作删除后不清空对象数据仅作标记
443
+* 调整模型的`save`方法返回值为布尔值
444
+* 修正Request类`isAjax`方法
445
+* 修正中间件的模块配置读取
446
+* 取消Request类的请求变量的设置功能
447
+* 取消请求变量获取的默认修饰符
448
+* Request类增加`setAction/setModule/setController`方法
449
+* 关联模型的`delete`方法调用Query类
450
+* 改进URL生成的域名识别
451
+* 改进URL检测对已定义路由的域名判断
452
+* 模型类增加`isExists`和`isForce`方法
453
+* 软删除的`destroy`和`restore`方法返回值调整为布尔值
454
+
455
+## V5.1.15 (2018-6-1)
456
+
457
+该版本主要改进了路由缓存的性能和缓存方式设置,增加了JSON格式文件日志的支持,并修正了社区反馈的一些问题。
458
+
459
+* 容器类增加`exists`方法 仅判断是否存在对象实例
460
+* 取消配置类的`autoload`方法
461
+* 改进路由缓存大小提高性能
462
+* 改进Dispatch类`init`方法
463
+* 增加`make:validate`指令生成验证器类
464
+* Config类`get`方法支持默认值参数
465
+* 修正字段缓存指令
466
+* 改进App类对`null`数据的返回
467
+* 改进模型类的`__isset`方法判断
468
+* 修正`Query`类的`withAggregate`方法
469
+* 改进`RuleItem`类的`setRuleName`方法
470
+* 修正依赖注入和参数的冲突问题
471
+* 修正Db类对第三方驱动的支持
472
+* 修正模型类查询对象问题
473
+* 修正File缓存驱动的`has`方法
474
+* 修正资源路由嵌套
475
+* 改进Request类对`$_SERVER`变量的读取
476
+* 改进请求缓存处理
477
+* 路由缓存支持指定单独的缓存方式和参数
478
+* 修正资源路由的中间件多次执行问题
479
+* 修正`optimize:config`指令
480
+* 文件日志支持`JSON`格式日志保存
481
+* 修正Db类`connect`方法
482
+* 改进Log类`write`方法不会自动写入之前日志
483
+* 模型的关联操作默认启用事务
484
+* 改进软删除的事件响应
485
+
486
+## V5.1.14 (2018-5-18)
487
+
488
+该版本主要对底层容器进行了一些优化改进,并增加了路由缓存功能,可以进一步提升路由性能。
489
+
490
+* 依赖注入的对象参数传入改进
491
+* 改进核心类的容器实例化
492
+* 改进日期字段的读取
493
+* 改进验证类的`getScene`方法
494
+* 模型的`create`方法和`save`方法支持`replace`操作
495
+* 改进`Db`类的调用机制
496
+* App类调整为容器类
497
+* 改进容器默认绑定
498
+* `Loader`类增加工厂类的实例化方法
499
+* 增加路由变量默认规则配置参数
500
+* 增加路由缓存设计
501
+* 错误处理机制改进
502
+* 增加清空路由缓存指令
503
+
504
+
505
+## V5.1.13 (2018-5-11)
506
+
507
+该版本主要增加了MySQL的XA事务支持,模型事件支持观察者,以及对Facade类的改进。
508
+
509
+* 改进自动缓存
510
+* 改进Url生成
511
+* 修正数据缓存
512
+* 修正`value`方法的缓存
513
+* `join`方法和`view`方法的条件支持使用`Expression`对象
514
+* 改进驱动的`parseKey`方法
515
+* 改进Request类`host`方法和`domain`方法对端口的处理
516
+* 模型增加`withEvent`方法用于控制当前操作是否需要执行模型事件
517
+* 模型`setInc/setDec`方法支持更新事件
518
+* 模型添加`before_restore/after_restore`事件
519
+* 增加模型事件观察者
520
+* 路由增加`mobile`方法设置是否允许手机访问
521
+* 数据库XA事务支持
522
+* 改进索引数组查询对`IN`查询的支持
523
+* 修正`invokeMethod`方法
524
+* 修正空数据写入返回值的BUG
525
+* redis驱动支持`predis`
526
+* 改进`parseData`方法
527
+* 改进模块加载
528
+* App类初始化方法调整
529
+* 改进数组查询对表达式`Expression`对象支持
530
+* 改进闭包的依赖注入调用
531
+* 改进多对多关联的中间表模型更新
532
+* 增加容器中对象的自定义实例化
533
+
534
+## V5.1.12 (2018-4-25)
535
+
536
+该版本主要改进了主从查询的及时性,并支持动态设置请求数据。
537
+
538
+* 支持动态设置请求数据
539
+* 改进`comment`方法解析
540
+* 修正App类`__unset`方法
541
+* 改进url生成的域名绑定
542
+* 改进主从查询的及时性
543
+* 修正`value`的数据缓存功能
544
+* 改进分页类的集合对象方法调用
545
+* 改进Db类的代码提示
546
+* SQL日志增加主从标记
547
+
548
+## V5.1.11 (2018-4-19)
549
+
550
+该版本为安全和修正版本,改进了JSON查询的参数绑定问题和容器类对象实例获取,并包含一处可能的安全隐患,建议更新。
551
+
552
+* 支持指定JSON数据查询的字段类型
553
+* 修正`selectInsert`方法
554
+* `whereColumn`方法支持数组方式
555
+* 改进容器类`make`方法
556
+* 容器类`delete`方法支持数组
557
+* 改进`composer`自动加载
558
+* 改进模板引擎
559
+* 修正`like`查询的一处安全隐患
560
+
561
+## V5.1.10 (2018-4-16)
562
+
563
+该版本为修正版本,修正上一个版本的一些BUG,并增强了`think clear`指令。
564
+
565
+* 改进`orderField`方法
566
+* 改进`exists`查询
567
+* 修改cli模式入口文件位置计算
568
+* 修正`null`查询
569
+* 改进`parseTime`方法
570
+* 修正关联预载入查询
571
+* 改进`mysql`驱动
572
+* 改进`think clear`指令 支持 `-c -l -r `选项
573
+* 改进路由规则对`/`结尾的支持
574
+
575
+## V5.1.9 (2018-4-12)
576
+
577
+该版本主要是一些改进和修正,并包含一个安全更新,是一个推荐更新版本。
578
+
579
+* 默认模板渲染规则支持配置保持操作方法名
580
+* 改进`Request`类的`ip`方法
581
+* 支持模型软删除字段的默认值定义
582
+* 改进路由变量规则对中文的支持
583
+* 使用闭包查询的时候使用`cache(true)` 抛出异常提示
584
+* 改进`Loader`类`loadComposerAutoloadFiles`方法
585
+* 改进查询方法安全性
586
+* 修正路由地址中控制器名驼峰问题
587
+* 调整上一个版本的`module_init`和`app_begin`的钩子顺序问题
588
+* 改进CLI命令行执行的问题
589
+* 修正社区反馈的其它问题
590
+
591
+## V5.1.8 (2018-4-5)
592
+
593
+该版本主要改进了中间件的域名和模块支持,并同时修正了几个已知问题。
594
+
595
+* 增加`template.auto_rule` 参数设置默认模板渲染的操作名自动转换规则
596
+* 默认模板渲染规则改由视图驱动实现
597
+* 修正路由标识定义
598
+* 修正控制器路由方法
599
+* 改进Request类`ip`方法支持自定义代理IP参数
600
+* 路由注册中间件支持数组方式别名
601
+* 改进命令行执行下的`composer`自动加载
602
+* 添加域名中间件注册支持
603
+* 全局中间件支持模块定义文件
604
+* Log日志配置支持`close`参数可以全局关闭日志写入
605
+* 中间件方法中捕获`HttpResponseException`异常
606
+* 改进中间件的闭包参数传入
607
+* 改进分组路由的延迟解析
608
+* 改进URL生成对域名绑定的支持
609
+* 改进文件缓存和文件日志驱动的并发支持
610
+
611
+## V5.1.7 (2018-3-28)
612
+
613
+该版本主要修正了路由的一些问题,并改进了查询的安全性。
614
+
615
+* 支持`middleware`配置文件预先定义中间件别名方便路由调用
616
+* 修正资源路由
617
+* 改进`field`方法 自动识别`fieldRaw`
618
+* 增加`Expression`类
619
+* Query类增加`raw`方法
620
+* Query类的`field`/ `order` 和` where`方法都支持使用`raw`表达式查询
621
+* 改进`inc/dec`查询 支持批量更新
622
+* 改进路由分组
623
+* 改进Response类`create`方法
624
+* 改进composer自动加载
625
+* 修正域名路由的`append`方法
626
+* 修正操作方法的初始化方法获取不到问题
627
+
628
+## V5.1.6 (2018-3-26)
629
+
630
+该版本主要改进了路由规则的匹配算法,大幅提升了路由性能。并正式引入了中间件的支持,可以在路由中定义或者全局定义。另外包含了一个安全更新,是一个建议更新版本。
631
+
632
+* 改进URL生成对路由`ext`方法的支持
633
+* 改进查询缓存对不同数据库相同表名的支持
634
+* 改进composer自动加载的性能
635
+* 改进空路由变量对默认参数的影响
636
+* mysql的`json`字段查询支持多级
637
+* Query类增加`option`方法
638
+* 优化路由匹配
639
+* 修复验证规则数字键名丢失问题
640
+* 改进路由Url生成
641
+* 改进一对一关联预载入查询
642
+* Request类增加`rootDomain`方法
643
+* 支持API资源控制器生成 `make:controller --api`
644
+* 优化Template类的标签解析
645
+* 容器类增加删除和清除对象实例的方法
646
+* 修正MorphMany关联的`eagerlyMorphToMany`方法一处错误
647
+* Container类的异常捕获改进
648
+* Domain对象支持`bind`方法
649
+* 修正分页参数
650
+* 默认模板的输出规则不受URL影响
651
+* 注解路由支持多级控制器
652
+* Query类增加`getNumRows`方法获取前次操作影响的记录数
653
+* 改进查询条件的性能
654
+* 改进模型类`readTransform`方法对序列化类型的处理
655
+* Log类增加`close`方法可以临时关闭当前请求的日志写入
656
+* 文件日志方式增加自动清理功能(设置`max_files`参数)
657
+* 修正Query类的`getPk`方法
658
+* 修正模板缓存的布局开关问题
659
+* 修正Query类`select`方法的缓存
660
+* 改进input助手函数
661
+* 改进断线重连的信息判断
662
+* 改进正则验证方法
663
+* 调整语言包的加载顺序 放到`app_init`之前
664
+* controller类`fetch`方法改为`final`
665
+* 路由地址中的变量支持使用`<var>`方式
666
+* 改进XMLResponse 支持传入编码过的xml内容
667
+* 修正Query类`view`方法的数组表名支持
668
+* 改进路由的模型闭包绑定
669
+* 改进分组变量规则的继承
670
+* 改进`cli-server`模式下的`composer`自动加载
671
+* 路由变量规则异常捕获
672
+* 引入中间件支持
673
+* 路由定义增加`middleware`方法
674
+* 增加生成中间件指令`make:middleware` 
675
+* 增加全局中间件定义支持
676
+* 改进`optimize:config`指令对全局中间件的支持
677
+* 改进config类`has`方法
678
+* 改进时间查询的参数绑定
679
+* 改进`inc/dec/exp`查询的安全性
680
+
681
+
682
+## V5.1.5 (2018-1-31)
683
+
684
+该版本主要增强了数据库的JSON查询,并支持JSON字段的聚合查询,改进了一些性能问题,修正了路由的一些BUG,主要更新如下:
685
+
686
+* 改进数据集查询对`JSON`数据的支持
687
+* 改进聚合查询对`JSON`字段的支持
688
+* 模型类增加`getOrFail`方法
689
+* 改进数据库驱动的`parseKey`方法
690
+* 改进Query类`join`方法的自关联查询
691
+* 改进数据查询不存在不生成查询缓存
692
+* 增加`run`命令行指令启动内置服务器
693
+* `Request`类`pathinfo`方法改进对`cli-server`支持
694
+* `Session`类增加`use_lock`配置参数设置是否启用锁机制
695
+* 优化`File`缓存自动生成空目录的问题
696
+* 域名及分组路由支持`append`方法传递隐式参数
697
+* 改进日志的并发写入问题
698
+* 改进`Query`类的`where`方法支持传入`Query`对象
699
+* 支持设置单个日志文件的文件名
700
+* 修正路由规则的域名条件约束 
701
+* `Request`类增加`subDomain`方法用于获取当前子域名
702
+* `Response`类增加`allowCache`方法控制是否允许请求缓存
703
+* `Request`类增加`sendData`方法便于扩展
704
+* 改进`Env`类不依赖`putenv`方法
705
+* 改进控制台`trace`显示错误
706
+* 改进`MorphTo`关联
707
+* 改进完整路由匹配后带斜线访问出错的情况
708
+* 改进路由的多级分组问题
709
+* 路由url地址生成支持多级分组
710
+* 改进路由Url生成的`url_convert`参数的影响
711
+* 改进`miss`和`auto`路由内部解析
712
+* 取消预载入关联查询缓存功能
713
+
714
+## V5.1.4 (2018-1-19)
715
+
716
+该版本主要增强了数据库和模型操作,主要更新如下:
717
+
718
+* 支持设置 `deleteTime`属性为`false` 关闭软删除
719
+* 模型增加`getError`方法
720
+* 改进Query类的`getTableFields`/`getFieldsType`方法 支持表名自动获取
721
+* 模型类`toCollection`方法增加参数指定数据集类
722
+* 改进`union`查询
723
+* 关联预载入`with`方法增加缓存参数
724
+* 改进模型类的`get`和`all`方法的缓存 支持关联缓存
725
+* 支持`order by field`操作
726
+* 改进`insertAll`分批写入
727
+* 改进`json`字段数据支持
728
+* 增加JSON数据的模型对象化操作
729
+* 改进路由`ext`参数检测 
730
+* 修正`rule`方法的`method`参数使用 `get|post` 方式注册路由的问题
731
+
732
+## V5.1.3 (2018-1-12)
733
+
734
+该版本主要改进了路由及调整函数加载顺序,主要更新如下:
735
+
736
+* 增加`env`助手函数;
737
+* 增加`route`助手函数;
738
+* 增加视图路由方法;
739
+* 增加路由重定向方法;
740
+* 路由默认区分最后的目录斜杆(支持设置不区分);
741
+* 调整公共文件和配置文件的加载顺序(可以在配置文件中直接使用助手函数);
742
+* 视图类增加`filter`方法设置输出过滤;
743
+* `view`助手函数增加`filter`参数;
744
+* 改进缓存生成指令;
745
+* Session类的`get`方法支持获取多级;
746
+* Request类`only`方法支持指定默认值;
747
+* 改进路由分组;
748
+* 修正使用闭包查询的时候自动数据缓存出错的情况;
749
+* 废除`view_filter`钩子位置;
750
+* 修正分组下面的资源路由;
751
+* 改进session驱动;
752
+
753
+## V5.1.2 (2018-1-8)
754
+
755
+该版本改进了配置类及数据库类,主要更新如下:
756
+
757
+* 修正嵌套路由分组;
758
+* 修正自定义模板标签界定符后表达式语法出错的情况;
759
+* 修正自关联的多次调用问题;
760
+* 修正数组查询的`null`条件查询;
761
+* 修正Query类的`order`及`field`的一处可能的BUG;
762
+* 配置参数设置支持三级;
763
+* 配置对象支持`ArrayAccess`;
764
+* App类增加`path`方法用于设置应用目录;
765
+* 关联定义增加`selfRelation`方法用于设置是否为自关联;
766
+
767
+## V5.1.1 (2018-1-3)
768
+
769
+修正一些反馈的BUG,包括:
770
+
771
+* 修正Cookie类存取数组的问题
772
+* 修正Controller的`fetch`方法
773
+* 改进跨域请求
774
+* 修正`insertAll`方法
775
+* 修正`chunk`方法
776
+
777
+## V5.1.0 (2018-1-1)
778
+
779
+主要更新如下:
780
+
781
+* 增加注解路由支持
782
+* 路由支持跨域请求设置
783
+* 增加`app_dispatch`钩子位置
784
+* 修正多对多关联的`detach`方法
785
+* 修正软删除的`destroy`方法
786
+* Cookie类`httponly`参数默认为false
787
+* 日志File驱动增加`single`参数配置记录同一个文件(不按日期生成)
788
+* 路由的`ext`和`denyExt`方法支持不传任何参数
789
+* 改进模型的`save`方法对`oracle`的支持
790
+* Query类的`insertall`方法支持配合`data`和`limit`方法
791
+* 增加`whereOr`动态查询支持
792
+* 日志的ip地址记录改进
793
+* 模型`saveAll`方法支持`isUpdate`方法
794
+* 改进`Pivot`模型的实例化操作
795
+* 改进Model类的`data`方法
796
+* 改进多对多中间表模型类
797
+* 模型增加`force`方法强制更新所有数据
798
+* Hook类支持设置入口方法名称
799
+* 改进验证类
800
+* 改进`hasWhere`查询的数据重复问题
801
+* 模型的`saveall`方法返回数据集对象
802
+* 改进File缓存的`clear`方法
803
+* 缓存添加统一的序列化机制
804
+* 改进泛三级域名的绑定
805
+* 改进泛域名的传值和取值
806
+* Request类增加`panDomain`方法
807
+* 改进废弃字段判断
808
+* App类增加`create`方法用于实例化应用类库
809
+* 容器类增加`has`方法
810
+* 改进多数据库切换连接
811
+* 改进断线重连的异常捕获
812
+* 改进模型类`buildQuery`方法
813
+* Query类增加`unionAll`方法
814
+* 关联统计功能增强(支持Sum/Max/Min/Avg)
815
+* 修正延迟写入
816
+* chunk方法支持复合主键
817
+* 改进JSON类型的写入
818
+* 改进Mysql的insertAll方法
819
+* Model类`save`方法改进复合主键包含自增的情况
820
+* 改进Query类`inc`和`dec`方法的关键字处理
821
+* File缓存inc和dec方法保持原来的有效期
822
+* 改进redis缓存的有效期判断
823
+* 增加checkRule方法用于单独数据的多个验证规则
824
+* 修正setDec方法的延迟写入
825
+* max和min方法增加force参数
826
+* 二级配置参数区分大小写
827
+* 改进join方法自关联的问题
828
+* 修正关联模型自定义表名的情况
829
+* Query类增加getFieldsType和getTableFields方法
830
+* 取消视图替换功能及view_replace_str配置参数
831
+* 改进域名绑定模块后的额外路由规则问题
832
+* 改进mysql的insertAll方法
833
+* 改进insertAll方法写入json字段数据的支持
834
+* 改进redis长连接多编号库的情况
835
+
836
+## RC3版本(2017-11-6)
837
+
838
+主要更新如下:
839
+
840
+* 改进redis驱动的`get`方法
841
+* 修正Query类的`alias`方法
842
+* `File`类错误信息支持多语言
843
+* 修正路由的额外参数解析
844
+* 改进`whereTime`方法
845
+* 改进Model类`getAttr`方法
846
+* 改进App类的`controller`和`validate`方法支持多层
847
+* 改进`HasManyThrough`类
848
+* 修正软删除的`restore`方法
849
+* 改进`MorpthTo`关联
850
+* 改进数据库驱动类的`parseKey`方法
851
+* 增加`whereField`动态查询方法
852
+* 模型增加废弃字段功能
853
+* 改进路由的`after`行为检查和`before`行为机制
854
+* 改进路由分组的检查
855
+* 修正mysql的`json`字段查询
856
+* 取消Connection类的`quote`方法
857
+* 改进命令行的支持
858
+* 验证信息支持多语言
859
+* 修正路由模型绑定
860
+* 改进参数绑定类型对枚举类型的支持
861
+* 修正模板的`{$Think.version} `输出
862
+* 改进模板`date`函数解析
863
+* 改进`insertAll`方法支持分批执行
864
+* Request类`host`方法支持反向代理
865
+* 改进`JumpResponse`支持区分成功和错误模板
866
+* 改进开启类库后缀后的关联外键自动识别问题
867
+* 修正一对一关联的JOIN方式预载入查询问题
868
+* Query类增加`hidden`方法
869
+
870
+## RC2版本(2017-10-17)
871
+
872
+主要更新如下:
873
+
874
+* 修正视图查询
875
+* 修正资源路由
876
+* 修正`HasMany`关联 修正`where`方法的闭包查询
877
+* 一对一关联绑定属性到父模型后 关联属性不再保留
878
+* 修正应用的命令行配置文件读取
879
+* 改进`Connection`类的`getCacheKey`方法
880
+* 改进文件上传的非法图像异常
881
+* 改进验证类的`unique`规则
882
+* Config类`get`方法支持获取一级配置
883
+* 修正count方法对`fetchSql`的支持
884
+* 修正mysql驱动对`socket`支持
885
+* 改进Connection类的`getRealSql`方法
886
+* 修正`view`助手函数
887
+* Query类增加`leftJoin` `rightJoin` 和 `fullJoin`方法
888
+* 改进app_namespace的获取
889
+* 改进`append`方法对一对一`bind`属性的支持
890
+* 改进关联的`saveall`方法的返回值
891
+* 路由标识设置异常修复
892
+* 改进Route类`rule`方法
893
+* 改进模型的`table`属性设置
894
+* 改进composer autofile的加载顺序
895
+* 改进`exception_handle`配置对闭包的支持
896
+* 改进app助手函数增加参数
897
+* 改进composer的加载路径判断
898
+* 修正路由组合变量的URL生成
899
+* 修正路由URL生成
900
+* 改进`whereTime`查询并支持扩展规则
901
+* File类的`move`方法第二个参数支持`false`
902
+* 改进Config类
903
+* 改进缓存类`remember`方法
904
+* 惯例配置文件调整 Url类当普通模式参数的时候不做`urlencode`处理
905
+* 取消`ROOT_PATH`和`APP_PATH`常量定义 如需更改应用目录 自己重新定义入口文件
906
+* 增加`app_debug`的`Env`获取
907
+* 修正泛域名绑定
908
+* 改进查询表达式的解析机制
909
+* mysql增加`regexp`查询表达式 支持正则查询
910
+* 改进查询表达式的异常判断
911
+* 改进model类的`destroy`方法
912
+* 改进Builder类 取消`parseValue`方法
913
+* 修正like查询的参数绑定问题
914
+* console和start文件移出核心纳入应用库
915
+* 改进Db类主键删除方法
916
+* 改进泛域名绑定模块
917
+* 取消`BIND_MODULE`常量 改为在入口文件使用`bind`方法设置
918
+* 改进数组查询
919
+* 改进模板渲染的异常处理
920
+* 改进控制器基类的架构方法参数
921
+* 改进Controller类的`success`和`error`方法
922
+* 改进对浏览器`JSON-Handle`插件的支持
923
+* 优化跳转模板的移动端显示
924
+* 修正模型查询的`chunk`方法对时间字段的支持
925
+* 改进trace驱动
926
+* Collection类增加`push`方法
927
+* 改进Redis Session驱动
928
+* 增加JumpResponse驱动
929
+
930
+
931
+## RC1(2017-9-8)
932
+
933
+主要新特性为:
934
+
935
+* 引入容器和Facade支持
936
+* 依赖注入完善和支持更多场景
937
+* 重构的(对象化)路由
938
+* 配置和路由目录独立
939
+* 取消系统常量
940
+* 助手函数增强
941
+* 类库别名机制
942
+* 模型和数据库增强
943
+* 验证类增强
944
+* 模板引擎改进
945
+* 支持PSR-3日志规范
946
+* RC1版本取消了5.0多个字段批量数组查询的方式

+ 32
- 0
LICENSE.txt 查看文件

@@ -0,0 +1,32 @@
1
+
2
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
3
+版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn)
4
+All rights reserved。
5
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
6
+
7
+Apache Licence是著名的非盈利开源组织Apache采用的协议。
8
+该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
9
+允许代码修改,再作为开源或商业软件发布。需要满足
10
+的条件: 
11
+1. 需要给代码的用户一份Apache Licence ;
12
+2. 如果你修改了代码,需要在被修改的文件中说明;
13
+3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
14
+带有原来代码中的协议,商标,专利声明和其他原来作者规
15
+定需要包含的说明;
16
+4. 如果再发布的产品中包含一个Notice文件,则在Notice文
17
+件中需要带有本协议内容。你可以在Notice中增加自己的
18
+许可,但不可以表现为对Apache Licence构成更改。 
19
+具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
20
+
21
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24
+FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31
+ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
+POSSIBILITY OF SUCH DAMAGE.

+ 186
- 0
README.md 查看文件

@@ -0,0 +1,186 @@
1
+![](https://box.kancloud.cn/5a0aaa69a5ff42657b5c4715f3d49221) 
2
+
3
+ThinkPHP 5.1(LTS版本) —— 12载初心,你值得信赖的PHP框架
4
+===============
5
+
6
+[![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)
7
+[![Build Status](https://travis-ci.org/top-think/framework.svg?branch=master)](https://travis-ci.org/top-think/framework)
8
+[![Total Downloads](https://poser.pugx.org/topthink/framework/downloads)](https://packagist.org/packages/topthink/framework)
9
+[![Latest Stable Version](https://poser.pugx.org/topthink/framework/v/stable)](https://packagist.org/packages/topthink/framework)
10
+[![PHP Version](https://img.shields.io/badge/php-%3E%3D5.6-8892BF.svg)](http://www.php.net/)
11
+[![License](https://poser.pugx.org/topthink/framework/license)](https://packagist.org/packages/topthink/framework)
12
+
13
+ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括:
14
+
15
+ + 采用容器统一管理对象
16
+ + 支持Facade
17
+ + 注解路由支持
18
+ + 路由跨域请求支持
19
+ + 配置和路由目录独立
20
+ + 取消系统常量
21
+ + 助手函数增强
22
+ + 类库别名机制
23
+ + 增加条件查询
24
+ + 改进查询机制
25
+ + 配置采用二级
26
+ + 依赖注入完善
27
+ + 支持`PSR-3`日志规范
28
+ + 中间件支持(V5.1.6+)
29
+ + Swoole/Workerman支持(V5.1.18+)
30
+
31
+
32
+> ThinkPHP5的运行环境要求PHP5.6以上,兼容PHP8.0。
33
+
34
+## 安装
35
+
36
+使用composer安装
37
+
38
+~~~
39
+composer create-project topthink/think tp
40
+~~~
41
+
42
+启动服务
43
+
44
+~~~
45
+cd tp
46
+php think run
47
+~~~
48
+
49
+然后就可以在浏览器中访问
50
+
51
+~~~
52
+http://localhost:8000
53
+~~~
54
+
55
+更新框架
56
+~~~
57
+composer update topthink/framework
58
+~~~
59
+
60
+
61
+## 在线手册
62
+
63
++ [完全开发手册](https://www.kancloud.cn/manual/thinkphp5_1/content)
64
++ [升级指导](https://www.kancloud.cn/manual/thinkphp5_1/354155) 
65
+
66
+
67
+## 官方服务
68
+
69
++ [应用服务市场](https://market.topthink.com/)
70
++ [ThinkAPI——统一API服务](https://docs.topthink.com/think-api) 
71
+
72
+## 目录结构
73
+
74
+初始的目录结构如下:
75
+
76
+~~~
77
+www  WEB部署目录(或者子目录)
78
+├─application           应用目录
79
+│  ├─common             公共模块目录(可以更改)
80
+│  ├─module_name        模块目录
81
+│  │  ├─common.php      模块函数文件
82
+│  │  ├─controller      控制器目录
83
+│  │  ├─model           模型目录
84
+│  │  ├─view            视图目录
85
+│  │  └─ ...            更多类库目录
86
+│  │
87
+│  ├─command.php        命令行定义文件
88
+│  ├─common.php         公共函数文件
89
+│  └─tags.php           应用行为扩展定义文件
90
+│
91
+├─config                应用配置目录
92
+│  ├─module_name        模块配置目录
93
+│  │  ├─database.php    数据库配置
94
+│  │  ├─cache           缓存配置
95
+│  │  └─ ...            
96
+│  │
97
+│  ├─app.php            应用配置
98
+│  ├─cache.php          缓存配置
99
+│  ├─cookie.php         Cookie配置
100
+│  ├─database.php       数据库配置
101
+│  ├─log.php            日志配置
102
+│  ├─session.php        Session配置
103
+│  ├─template.php       模板引擎配置
104
+│  └─trace.php          Trace配置
105
+│
106
+├─route                 路由定义目录
107
+│  ├─route.php          路由定义
108
+│  └─...                更多
109
+│
110
+├─public                WEB目录(对外访问目录)
111
+│  ├─index.php          入口文件
112
+│  ├─router.php         快速测试文件
113
+│  └─.htaccess          用于apache的重写
114
+│
115
+├─thinkphp              框架系统目录
116
+│  ├─lang               语言文件目录
117
+│  ├─library            框架类库目录
118
+│  │  ├─think           Think类库包目录
119
+│  │  └─traits          系统Trait目录
120
+│  │
121
+│  ├─tpl                系统模板目录
122
+│  ├─base.php           基础定义文件
123
+│  ├─console.php        控制台入口文件
124
+│  ├─convention.php     框架惯例配置文件
125
+│  ├─helper.php         助手函数文件
126
+│  ├─phpunit.xml        phpunit配置文件
127
+│  └─start.php          框架入口文件
128
+│
129
+├─extend                扩展类库目录
130
+├─runtime               应用的运行时目录(可写,可定制)
131
+├─vendor                第三方类库目录(Composer依赖库)
132
+├─build.php             自动生成定义文件(参考)
133
+├─composer.json         composer 定义文件
134
+├─LICENSE.txt           授权说明文件
135
+├─README.md             README 文件
136
+├─think                 命令行入口文件
137
+~~~
138
+
139
+> 可以使用php自带webserver快速测试
140
+> 切换到根目录后,启动命令:php think run
141
+
142
+## 命名规范
143
+
144
+`ThinkPHP5`遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:
145
+
146
+### 目录和文件
147
+
148
+*   目录不强制规范,驼峰和小写+下划线模式均支持;
149
+*   类库、函数文件统一以`.php`为后缀;
150
+*   类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
151
+*   类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);
152
+
153
+### 函数和类、属性命名
154
+
155
+*   类的命名采用驼峰法,并且首字母大写,例如 `User`、`UserType`,默认不需要添加后缀,例如`UserController`应该直接命名为`User`;
156
+*   函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 `get_client_ip`;
157
+*   方法的命名使用驼峰法,并且首字母小写,例如 `getUserName`;
158
+*   属性的命名使用驼峰法,并且首字母小写,例如 `tableName`、`instance`;
159
+*   以双下划线“__”打头的函数或方法作为魔法方法,例如 `__call` 和 `__autoload`;
160
+
161
+### 常量和配置
162
+
163
+*   常量以大写字母和下划线命名,例如 `APP_PATH`和 `THINK_PATH`;
164
+*   配置参数以小写字母和下划线命名,例如 `url_route_on` 和`url_convert`;
165
+
166
+### 数据表和字段
167
+
168
+*   数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 `think_user` 表和 `user_name`字段,不建议使用驼峰和中文作为数据表字段命名。
169
+
170
+## 参与开发
171
+
172
+请参阅 [ThinkPHP5 核心框架包](https://github.com/top-think/framework)。
173
+
174
+## 版权信息
175
+
176
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
177
+
178
+本项目包含的第三方源码和二进制文件之版权信息另行标注。
179
+
180
+版权所有Copyright © 2006-2018 by ThinkPHP (http://thinkphp.cn)
181
+
182
+All rights reserved。
183
+
184
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
185
+
186
+更多细节参阅 [LICENSE.txt](LICENSE.txt)

+ 1
- 0
application/.htaccess 查看文件

@@ -0,0 +1 @@
1
+deny from all

+ 12
- 0
application/command.php 查看文件

@@ -0,0 +1,12 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: yunwuxin <448901948@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+return [];

+ 12
- 0
application/common.php 查看文件

@@ -0,0 +1,12 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: 流年 <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// 应用公共文件

+ 10
- 0
application/common/model/JobsTest.php 查看文件

@@ -0,0 +1,10 @@
1
+<?php
2
+namespace app\common\model;
3
+
4
+use think\Model;
5
+
6
+class JobsTest extends Model
7
+{
8
+
9
+}
10
+

+ 260
- 0
application/index/controller/Cms.php 查看文件

@@ -0,0 +1,260 @@
1
+<?php
2
+namespace app\index\controller;
3
+use think\Db;
4
+use think\Queue;
5
+use think\Controller;
6
+
7
+/*
8
+ *
9
+ */
10
+class Cms extends Controller
11
+{
12
+    /*
13
+     * 队列处理标签
14
+     * https://queue.dev.zx2049.com/index/Cms/tagHandle
15
+     */
16
+    public function tagHandle()
17
+    {
18
+        $h = date('H',time());
19
+        $h = (int)$h;
20
+        if($h > 8 && $h < 18){
21
+            //总共10小时
22
+            // 1.当前任务将由哪个类来负责处理。
23
+            // 当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
24
+            $jobHandlerClassName = 'app\jobs\cms\Tag';
25
+
26
+            // 2.当前任务归属的队列名称,如果为新队列,会自动创建
27
+            $jobQueueName = "TagJobQueue";
28
+
29
+            // 3.当前任务所需的业务数据, 不能为 resource 类型,其他类型最终将转化为json形式的字符串
30
+            // (jobData 为对象时,存储其public属性的键值对 )
31
+
32
+
33
+            $area = Db::connect('db1')
34
+                ->table('ey_citysite')
35
+                ->where(['level'=>1,'is_open'=>1,'status'=>1])
36
+                //->limit(1)
37
+                ->select();
38
+            //dump($area);
39
+            $area[] = [
40
+                'id' => 10000,
41
+                'name' => '主站',
42
+            ];
43
+
44
+            foreach ($area as $k=>$v){
45
+                //http://console.zx2049.com/api/cms/tagHandle?taskid=10&diqu=1
46
+                $jobData  = ['ts' => time(),'url'=>'http://console.zx2049.com/api/cms/tagHandle','taskid'=>10, 'area_id' => $v['id'], 'area_name' => $v['name']];//当前任务所需的业务数据
47
+                // 4.将该任务推送到消息队列,等待对应的消费者去执行
48
+                $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
49
+
50
+                // database 驱动时,返回值为 1|false;redis 驱动时,返回值为 随机字符串|false
51
+                //域名解析存在两条 *.dev
52
+                //这里明明返回0 0 !== false 是成立的
53
+                //以为一直成功 结果根本没插入数据库
54
+                //既然能执行到这里的代码 为何无法插入数据库 返回0
55
+                if( $isPushed !== false ){
56
+                    echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ" . "<br>";
57
+                }else{
58
+                    echo 'Oops, something went wrong.';
59
+                }
60
+                echo "<br/>";
61
+            }
62
+        }else{
63
+            echo "不在任务时间段内".$h;
64
+        }
65
+    }
66
+
67
+    /*
68
+     * 队列处理任务
69
+     * https://queue.dev.zx2049.com/index/Cms/taskHandle
70
+     */
71
+    public function taskHandle()
72
+    {
73
+        $h = date('H', time());
74
+        $h = (int)$h;
75
+        if ($h > 8 && $h < 18) {
76
+            // 1.当前任务将由哪个类来负责处理。
77
+            // 当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
78
+            $jobHandlerClassName = 'app\jobs\cms\Task';
79
+
80
+            // 2.当前任务归属的队列名称,如果为新队列,会自动创建
81
+            $jobQueueName = "TaskJobQueue";
82
+
83
+            // 3.当前任务所需的业务数据, 不能为 resource 类型,其他类型最终将转化为json形式的字符串
84
+            // (jobData 为对象时,存储其public属性的键值对 )
85
+
86
+
87
+            $area = Db::connect('db1')
88
+                ->table('ey_citysite')
89
+                ->where(['level' => 1, 'is_open' => 1, 'status' => 1])
90
+                //->limit(1)
91
+                ->select();
92
+            //dump($area);
93
+            $area[] = [
94
+                'id' => 10000,
95
+                'name' => '主站',
96
+            ];
97
+
98
+            foreach ($area as $k => $v) {
99
+                //http://console.zx2049.com/api/cms/tagHandle?taskid=10&diqu=1
100
+                $jobData = ['ts' => time(), 'url' => 'http://console.zx2049.com/api/cms/taskHandle', 'taskid' => 10, 'area_id' => $v['id'], 'area_name' => $v['name']];//当前任务所需的业务数据
101
+                // 4.将该任务推送到消息队列,等待对应的消费者去执行
102
+                $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
103
+
104
+                // database 驱动时,返回值为 1|false;redis 驱动时,返回值为 随机字符串|false
105
+                //域名解析存在两条 *.dev
106
+                //这里明明返回0 0 !== false 是成立的
107
+                //以为一直成功 结果根本没插入数据库
108
+                //既然能执行到这里的代码 为何无法插入数据库 返回0
109
+                if ($isPushed !== false) {
110
+                    echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ" . "<br>";
111
+                } else {
112
+                    echo 'Oops, something went wrong.';
113
+                }
114
+                echo "<br/>";
115
+            }
116
+        }else{
117
+            echo "不在任务时间段内".$h;
118
+        }
119
+    }
120
+
121
+    /*
122
+     * 百度提交api
123
+     * 主动推送
124
+     * 晚上12点执行
125
+     * https://queue.dev.zx2049.com/index/Cms/baiduSearchApi
126
+     */
127
+    public function baiduSearchApi(){
128
+        $num = 1;
129
+
130
+        $area = Db::connect('db1')
131
+            ->table('ey_citysite')
132
+            ->where(['level' => 1, 'is_open' => 1, 'status' => 1])
133
+            //->limit(1)
134
+            ->select();
135
+        //dump($area);
136
+        $area[] = [
137
+            'id' => 10000,
138
+            'name' => '主站',
139
+            'domain' => 'www'
140
+        ];
141
+        //dump($area);
142
+        $arr = [];
143
+        foreach ($area as $k => $v) {
144
+
145
+            //31区域(30+1-www) 山东关闭, 11个无法添加站点 , 剩余19个
146
+            //'yunnan','guizhou','zhongqing','sichuan' 这4个未添加站点
147
+            $pl = ['sx','xinjiangweiwuer','ningxia','qinghai','gansu','xicangzizhi','hainan','heilongjiang','jilin','liaoning','namenggu','yunnan','guizhou','zhongqing','sichuan'];
148
+           //echo $v['id'].'<br/>';
149
+
150
+            if(in_array($v['domain'], $pl)){
151
+                //echo "---------------------<br/>";
152
+                echo $num.'-'.$v['domain']."<font style='color:red;'>不存在站点,无法添加</font>!<br/>";
153
+                //echo "---------------------<br/>";
154
+                $num++;
155
+            }else{
156
+                $list = Db::connect('console')->table('yzn_task')
157
+                    ->where('diqu','=',$v['id'])
158
+                    ->where('is_run','=',1)
159
+                    ->where('is_ts','=',0)
160
+                    ->limit(1)
161
+                    ->select();
162
+
163
+                foreach ($list as $in => $row){
164
+                    //echo $row['link'].'<br/>';
165
+                    $arr[$v['id']]['list'][] = $row['link'];
166
+                    $arr[$v['id']]['ids'][] = $row['id'];
167
+                }
168
+                $arr[$v['id']]['domain'] = $v['domain'];
169
+
170
+                if(empty($arr[$v['id']]['list'])){
171
+                    //echo "---------------------<br/>";
172
+                    echo $num.'-'.$v['domain']."<font style='color:green;'>获取执行记录为空,无最新记录!</font><br/>";
173
+                    $num++;
174
+                    //echo "---------------------<br/>";
175
+                }
176
+            }
177
+
178
+        }
179
+
180
+        foreach ($arr as $k => $v){
181
+
182
+            //查询今日已发了几条
183
+            $count = Db::connect('console')->table('yzn_task')->where([
184
+                    'diqu' => $k,
185
+                    'is_run' => 1,
186
+                    'is_ts' => 1,
187
+                ])
188
+                ->whereTime('ts_time', 'today') //推送时间
189
+                ->count();
190
+
191
+           // dump($count); die;
192
+            if($count >= 10){
193
+                //超过10条
194
+                //假设没有手动提交的记录 只有api提交
195
+                echo $num.'-'.$v['domain']."<font style='color:blue;'>已提交达到10条记录</font><br/>";
196
+                $num++;
197
+            }else {
198
+                $urls = array();
199
+                if (!empty($v['list'])) {
200
+
201
+                    foreach ($v['list'] as $key => $item) {
202
+                        $urls[] = $item;
203
+                    }
204
+
205
+                    /*     dump($urls);
206
+                         dump($v['domain']);
207
+                         dump($v['ids']);*/
208
+
209
+                    if (!empty($urls)) {
210
+                        $api = 'http://data.zz.baidu.com/urls?site=https://' . $v['domain'] . '.gdzcfw.com&token=Jc7Qp1sfpQYGcaqY';
211
+                        $ch = curl_init();
212
+                        $options = array(
213
+                            CURLOPT_URL => $api,
214
+                            CURLOPT_POST => true,
215
+                            CURLOPT_RETURNTRANSFER => true,
216
+                            CURLOPT_POSTFIELDS => implode("\n", $urls),
217
+                            CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
218
+                        );
219
+                        curl_setopt_array($ch, $options);
220
+                        $result_s = curl_exec($ch);
221
+                        $result = json_decode($result_s, true);
222
+                        if (isset($result['success']) && (int)$result['success'] > 0) {
223
+                            //推送成功 按站点批量提交
224
+                            Db::connect('console')->table('yzn_task')->where('id', 'in', $v['ids'])->update(['is_ts' => 1, 'ts_time' => time()]);
225
+                            //插入日志
226
+                            $insert_data = [
227
+                                'catid' => 11,
228
+                                'title' => '域名' . $v['domain'] . '提交情况-本次条数(' . $result['success'] . ')-剩余('.$result['remain'].')',
229
+                                'content' => json_encode($arr) . '<br>百度原始响应结果:<br/>' . $result_s,
230
+                                'create_time' => time(),
231
+                                'update_time' => time(),
232
+                                'status' => 1,
233
+                                'site_id' => 1,
234
+                                'cid' => 0,
235
+                            ];
236
+                            Db::connect('console')->table('yzn_log')->insert($insert_data);
237
+                            echo $num.'-'.$insert_data['title']."<br/>";
238
+                            $num++;
239
+                        } else {
240
+                            $insert_data = [
241
+                                'catid' => 11,
242
+                                'title' => '域名' . $v['domain'] . '提交情况(失败)',
243
+                                'content' => $result_s,
244
+                                'create_time' => time(),
245
+                                'update_time' => time(),
246
+                                'status' => 0, //标识 失败
247
+                                'site_id' => 1,
248
+                                'cid' => 0,
249
+                            ];
250
+                            Db::connect('console')->table('yzn_log')->insert($insert_data);
251
+                            echo $num.'-'.$insert_data['title']."<br/>";
252
+                            $num++;
253
+                        }
254
+                    }
255
+                }
256
+            }
257
+        }
258
+        //dump($arr);
259
+    }
260
+}

+ 15
- 0
application/index/controller/Index.php 查看文件

@@ -0,0 +1,15 @@
1
+<?php
2
+namespace app\index\controller;
3
+
4
+class Index
5
+{
6
+    public function index()
7
+    {
8
+        return '<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px;} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:) </h1><p> ThinkPHP V5.1<br/><span style="font-size:30px">12载初心不改(2006-2018) - 你值得信赖的PHP框架</span></p></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=64890268" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="eab4b9f840753f8e7"></think>';
9
+    }
10
+
11
+    public function hello($name = 'ThinkPHP5')
12
+    {
13
+        return 'hello,' . $name;
14
+    }
15
+}

+ 48
- 0
application/index/controller/JobTest.php 查看文件

@@ -0,0 +1,48 @@
1
+<?php
2
+namespace app\index\controller;
3
+use think\Queue;
4
+use think\Controller;
5
+
6
+/*
7
+ *
8
+ */
9
+class JobTest extends Controller
10
+{
11
+    /*
12
+     * https://queue.dev.zx2049.com/index/JobTest/test
13
+     */
14
+    public function test()
15
+    {
16
+        // 1.当前任务将由哪个类来负责处理。
17
+        // 当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
18
+        $jobHandlerClassName = 'app\jobs\JobTest';
19
+
20
+        // 2.当前任务归属的队列名称,如果为新队列,会自动创建
21
+        $jobQueueName = "helloJobQueue";
22
+
23
+        // 3.当前任务所需的业务数据, 不能为 resource 类型,其他类型最终将转化为json形式的字符串
24
+        // (jobData 为对象时,存储其public属性的键值对 )
25
+        $jobData = ['ts' => time(), 'uniqId' => uniqid(), 'a' => 1];
26
+
27
+        // 4.将该任务推送到消息队列,等待对应的消费者去执行
28
+        for($i=1;$i<100;$i++){
29
+            $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
30
+
31
+            //var_dump($isPushed);
32
+            // database 驱动时,返回值为 1|false;redis 驱动时,返回值为 随机字符串|false
33
+
34
+            //域名解析存在两条 *.dev
35
+            //这里明明返回0 0 !== false 是成立的
36
+            //以为一直成功 结果根本没插入数据库
37
+            //既然能执行到这里的代码 为何无法插入数据库 返回0
38
+            if( $isPushed !== false ){
39
+                echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ" . "<br>";
40
+            }else{
41
+                echo 'Oops, something went wrong.';
42
+            }
43
+        }
44
+
45
+
46
+
47
+    }
48
+}

+ 43
- 0
application/index/controller/TagHandle.php 查看文件

@@ -0,0 +1,43 @@
1
+<?php
2
+namespace app\index\controller;
3
+use think\Queue;
4
+use think\Controller;
5
+
6
+/*
7
+ *
8
+ */
9
+class TagHandle extends Controller
10
+{
11
+    /*
12
+     * https://queue.dev.zx2049.com/index/TagHandle/index
13
+     */
14
+    public function index()
15
+    {
16
+        // 1.当前任务将由哪个类来负责处理。
17
+        // 当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
18
+        $jobHandlerClassName = 'app\jobs\JobTest';
19
+
20
+        // 2.当前任务归属的队列名称,如果为新队列,会自动创建
21
+        $jobQueueName = "helloJobQueue";
22
+
23
+        // 3.当前任务所需的业务数据, 不能为 resource 类型,其他类型最终将转化为json形式的字符串
24
+        // (jobData 为对象时,存储其public属性的键值对 )
25
+        $jobData = ['ts' => time(), 'uniqId' => uniqid(), 'a' => 1];
26
+
27
+        // 4.将该任务推送到消息队列,等待对应的消费者去执行
28
+        $isPushed = Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
29
+
30
+        var_dump($isPushed);
31
+        // database 驱动时,返回值为 1|false;redis 驱动时,返回值为 随机字符串|false
32
+
33
+        //域名解析存在两条 *.dev
34
+        //这里明明返回0 0 !== false 是成立的
35
+        //以为一直成功 结果根本没插入数据库
36
+        //既然能执行到这里的代码 为何无法插入数据库 返回0
37
+        if( $isPushed !== false ){
38
+            echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ" . "<br>";
39
+        }else{
40
+            echo 'Oops, something went wrong.';
41
+        }
42
+    }
43
+}

+ 64
- 0
application/jobs/JobTest.php 查看文件

@@ -0,0 +1,64 @@
1
+<?php
2
+namespace app\jobs;
3
+use think\queue\Job;
4
+use app\common\model\JobsTest as JobsTestModel;
5
+class JobTest
6
+{
7
+    /**
8
+     * fire方法是消息队列默认调用的方法
9
+     * @param Job            $job      当前的任务对象
10
+     * @param array|mixed    $data     发布任务时自定义的数据
11
+     */
12
+    public function fire(Job $job, $data)
13
+    {
14
+        // 此处做一些 check,提前判断是否需要执行
15
+        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
16
+        if(! $isJobStillNeedToBeDone){
17
+            $job->delete();
18
+            return;
19
+        }
20
+        // 执行逻辑处理(即:你需要该消息队列做什么)
21
+        $isJobDone = $this->doHelloJob($data);
22
+        if ($isJobDone) {
23
+            // 如果任务执行成功,记得删除任务
24
+            $job->delete();
25
+        } else {
26
+            // 通过这个方法可以检查这个任务已经重试了几次了
27
+            if ($job->attempts() > 3) {
28
+                $job->delete();
29
+                // 也可以重新发布这个任务
30
+                //$job->release(2); // $delay为延迟时间,表示该任务延迟2秒后再执行
31
+            }
32
+        }
33
+    }
34
+
35
+    /**
36
+     * 有些消息在到达消费者时,可能已经不再需要执行了
37
+     * @param $data 发布任务时自定义的数据
38
+     * @return bool 任务执行的结果
39
+     */
40
+    private function checkDatabaseToSeeIfJobNeedToBeDone($data){
41
+        return true;
42
+    }
43
+
44
+    /**
45
+     * 根据消息中的数据进行实际的业务处理...
46
+     * @param $data
47
+     * @return bool
48
+     */
49
+    private function doHelloJob($data)
50
+    {
51
+        // TODO 该处为实际业务逻辑,即:对消息中的数据进行处理
52
+        $model = new JobsTestModel();
53
+        $inData = [
54
+            'uniqId' => uniqid(),
55
+            'time' => $data['ts'],
56
+            'content' => '队列成功的插入数据'
57
+        ];
58
+        $res = $model->save($inData);
59
+        if (! $res) {
60
+            return false;
61
+        }
62
+        return true;
63
+    }
64
+}

+ 83
- 0
application/jobs/cms/Tag.php 查看文件

@@ -0,0 +1,83 @@
1
+<?php
2
+namespace app\jobs\cms;
3
+use think\queue\Job;
4
+use app\common\model\JobsTest as JobsTestModel;
5
+class Tag
6
+{
7
+    /**
8
+     * fire方法是消息队列默认调用的方法
9
+     * @param Job            $job      当前的任务对象
10
+     * @param array|mixed    $data     发布任务时自定义的数据
11
+     */
12
+    public function fire(Job $job, $data)
13
+    {
14
+        // 此处做一些 check,提前判断是否需要执行
15
+        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
16
+        if(! $isJobStillNeedToBeDone){
17
+            $job->delete();
18
+            return;
19
+        }
20
+        // 执行逻辑处理(即:你需要该消息队列做什么)
21
+        $isJobDone = $this->doHelloJob($data);
22
+        if ($isJobDone) {
23
+            // 如果任务执行成功,记得删除任务
24
+            $job->delete();
25
+        } else {
26
+            // 通过这个方法可以检查这个任务已经重试了几次了
27
+            if ($job->attempts() > 3) {
28
+                $job->delete();
29
+                // 也可以重新发布这个任务
30
+                //$job->release(2); // $delay为延迟时间,表示该任务延迟2秒后再执行
31
+            }
32
+        }
33
+    }
34
+
35
+    /**
36
+     * 有些消息在到达消费者时,可能已经不再需要执行了
37
+     * @param $data 发布任务时自定义的数据
38
+     * @return bool 任务执行的结果
39
+     */
40
+    private function checkDatabaseToSeeIfJobNeedToBeDone($data){
41
+        return true;
42
+    }
43
+
44
+    /**
45
+     * 根据消息中的数据进行实际的业务处理...
46
+     * @param $data
47
+     * @return bool
48
+     */
49
+    private function doHelloJob($data)
50
+    {
51
+        /*
52
+         * "data": {
53
+            "ts": 1713866309,
54
+            "url": "http:\/\/console.zx2049.com\/api\/cms\/tagHandle",
55
+            "taskid": 10,
56
+            "area_id": 1,
57
+            "area_name": "\u5e7f\u4e1c"
58
+          },
59
+         */
60
+
61
+        //测试
62
+        print("<info>------------------------------------------------</info> \n");
63
+        print("<info>执行标签处理: " . $data['area_name'].$data['area_id'] . "</info> \n");
64
+
65
+        // TODO 该处为实际业务逻辑,即:对消息中的数据进行处理
66
+        //拼装url
67
+        $url = $data['url'].'?taskid='.$data['taskid'].'&diqu='.$data['area_id'];
68
+        //发送执行
69
+        $content = file_get_contents($url);
70
+
71
+        //{"code":1,"msg":"成功","time":1713883656,"data":null}
72
+        //判断是否执行成功
73
+        $respon = json_decode($content,true);
74
+        if((int)$respon['code'] === 1){
75
+            print("<info>结果: " . $respon['msg']. "</info> \n");
76
+            return true;
77
+        }else{
78
+            $info = isset($respon["data"])&&!empty($respon["data"])&&is_array($respon["data"])?json_encode($respon["data"],JSON_UNESCAPED_UNICODE):'未知';
79
+            print("<info>结果: " .$respon['msg'].'('.$info.')'.$data['area_name'].$data['area_id'] . "失败</info> \n");
80
+            return false;
81
+        }
82
+    }
83
+}

+ 84
- 0
application/jobs/cms/Task.php 查看文件

@@ -0,0 +1,84 @@
1
+<?php
2
+namespace app\jobs\cms;
3
+use think\queue\Job;
4
+use app\common\model\JobsTest as JobsTestModel;
5
+class Task
6
+{
7
+    /**
8
+     * fire方法是消息队列默认调用的方法
9
+     * @param Job            $job      当前的任务对象
10
+     * @param array|mixed    $data     发布任务时自定义的数据
11
+     */
12
+    public function fire(Job $job, $data)
13
+    {
14
+        // 此处做一些 check,提前判断是否需要执行
15
+        $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
16
+        if(! $isJobStillNeedToBeDone){
17
+            $job->delete();
18
+            return;
19
+        }
20
+        // 执行逻辑处理(即:你需要该消息队列做什么)
21
+        $isJobDone = $this->doHelloJob($data);
22
+        if ($isJobDone) {
23
+            // 如果任务执行成功,记得删除任务
24
+            $job->delete();
25
+        } else {
26
+            // 通过这个方法可以检查这个任务已经重试了几次了
27
+            if ($job->attempts() > 3) {
28
+                $job->delete();
29
+                // 也可以重新发布这个任务
30
+                //$job->release(2); // $delay为延迟时间,表示该任务延迟2秒后再执行
31
+            }
32
+        }
33
+    }
34
+
35
+    /**
36
+     * 有些消息在到达消费者时,可能已经不再需要执行了
37
+     * @param $data 发布任务时自定义的数据
38
+     * @return bool 任务执行的结果
39
+     */
40
+    private function checkDatabaseToSeeIfJobNeedToBeDone($data){
41
+        return true;
42
+    }
43
+
44
+    /**
45
+     * 根据消息中的数据进行实际的业务处理...
46
+     * @param $data
47
+     * @return bool
48
+     */
49
+    private function doHelloJob($data)
50
+    {
51
+        /*
52
+         * "data": {
53
+            "ts": 1713866309,
54
+            "url": "http:\/\/console.zx2049.com\/api\/cms\/tagHandle",
55
+            "taskid": 10,
56
+            "area_id": 1,
57
+            "area_name": "\u5e7f\u4e1c"
58
+          },
59
+         */
60
+
61
+        //测试
62
+        print("<info>------------------------------------------------</info> \n");
63
+        print("<info>执行任务处理: " . $data['area_name'].$data['area_id'] . "</info> \n");
64
+
65
+        // TODO 该处为实际业务逻辑,即:对消息中的数据进行处理
66
+        //拼装url
67
+        $url = $data['url'].'?taskid='.$data['taskid'].'&diqu='.$data['area_id'];
68
+        //发送执行
69
+        $content = file_get_contents($url);
70
+
71
+        //{"code":1,"msg":"成功","time":1713883656,"data":null}
72
+        //判断是否执行成功
73
+        $respon = json_decode($content,true);
74
+        if((int)$respon['code'] === 1){
75
+            print("<info>结果: " . $respon['msg']. "</info> \n");
76
+            return true;
77
+        }else{
78
+            //异常会一直重发 不会继续执行 并 删除任务
79
+            $info = isset($respon["data"])&&!empty($respon["data"])&&is_array($respon["data"])?json_encode($respon["data"],JSON_UNESCAPED_UNICODE):'未知';
80
+            print("<info>结果: " .$respon['msg'].'('.$info.')'.$data['area_name'].$data['area_id'] . "失败</info> \n");
81
+            return false;
82
+        }
83
+    }
84
+}

+ 14
- 0
application/provider.php 查看文件

@@ -0,0 +1,14 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// 应用容器绑定定义
13
+return [
14
+];

+ 28
- 0
application/tags.php 查看文件

@@ -0,0 +1,28 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// 应用行为扩展定义文件
13
+return [
14
+    // 应用初始化
15
+    'app_init'     => [],
16
+    // 应用开始
17
+    'app_begin'    => [],
18
+    // 模块初始化
19
+    'module_init'  => [],
20
+    // 操作开始执行
21
+    'action_begin' => [],
22
+    // 视图内容过滤
23
+    'view_filter'  => [],
24
+    // 日志写入
25
+    'log_write'    => [],
26
+    // 应用结束
27
+    'app_end'      => [],
28
+];

+ 26
- 0
build.php 查看文件

@@ -0,0 +1,26 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+return [
13
+    // 生成应用公共文件
14
+    '__file__' => ['common.php'],
15
+
16
+    // 定义demo模块的自动生成 (按照实际定义的文件名生成)
17
+    'demo'     => [
18
+        '__file__'   => ['common.php'],
19
+        '__dir__'    => ['behavior', 'controller', 'model', 'view'],
20
+        'controller' => ['Index', 'Test', 'UserType'],
21
+        'model'      => ['User', 'UserType'],
22
+        'view'       => ['index/index'],
23
+    ],
24
+
25
+    // 其他更多的模块定义
26
+];

+ 34
- 0
composer.json 查看文件

@@ -0,0 +1,34 @@
1
+{
2
+    "name": "topthink/think",
3
+    "description": "the new thinkphp framework",
4
+    "type": "project",
5
+    "keywords": [
6
+        "framework",
7
+        "thinkphp",
8
+        "ORM"
9
+    ],
10
+    "homepage": "http://thinkphp.cn/",
11
+    "license": "Apache-2.0",
12
+    "authors": [
13
+        {
14
+            "name": "liu21st",
15
+            "email": "liu21st@gmail.com"
16
+        }
17
+    ],
18
+    "require": {
19
+        "php": ">=5.6.0",
20
+        "topthink/framework": "5.1.*",
21
+        "topthink/think-queue": "2.0.4"
22
+    },
23
+    "autoload": {
24
+        "psr-4": {
25
+            "app\\": "application"
26
+        }
27
+    },
28
+    "extra": {
29
+        "think-path": "thinkphp"
30
+    },
31
+    "config": {
32
+        "preferred-install": "dist"
33
+    }
34
+}

+ 217
- 0
composer.lock 查看文件

@@ -0,0 +1,217 @@
1
+{
2
+    "_readme": [
3
+        "This file locks the dependencies of your project to a known state",
4
+        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
+        "This file is @generated automatically"
6
+    ],
7
+    "content-hash": "96d9cef57d4d985d58590b21708c88fc",
8
+    "packages": [
9
+        {
10
+            "name": "topthink/framework",
11
+            "version": "v5.1.42",
12
+            "source": {
13
+                "type": "git",
14
+                "url": "https://github.com/top-think/framework.git",
15
+                "reference": "ecf1a90d397d821ce2df58f7d47e798c17eba3ad"
16
+            },
17
+            "dist": {
18
+                "type": "zip",
19
+                "url": "https://api.github.com/repos/top-think/framework/zipball/ecf1a90d397d821ce2df58f7d47e798c17eba3ad",
20
+                "reference": "ecf1a90d397d821ce2df58f7d47e798c17eba3ad",
21
+                "shasum": ""
22
+            },
23
+            "require": {
24
+                "php": ">=5.6.0",
25
+                "topthink/think-installer": "2.*"
26
+            },
27
+            "require-dev": {
28
+                "johnkary/phpunit-speedtrap": "^1.0",
29
+                "mikey179/vfsstream": "~1.6",
30
+                "phpdocumentor/reflection-docblock": "^2.0",
31
+                "phploc/phploc": "2.*",
32
+                "phpunit/phpunit": "^5.0|^6.0",
33
+                "sebastian/phpcpd": "2.*",
34
+                "squizlabs/php_codesniffer": "2.*"
35
+            },
36
+            "type": "think-framework",
37
+            "notification-url": "https://packagist.org/downloads/",
38
+            "license": [
39
+                "Apache-2.0"
40
+            ],
41
+            "authors": [
42
+                {
43
+                    "name": "liu21st",
44
+                    "email": "liu21st@gmail.com"
45
+                },
46
+                {
47
+                    "name": "yunwuxin",
48
+                    "email": "448901948@qq.com"
49
+                }
50
+            ],
51
+            "description": "the new thinkphp framework",
52
+            "homepage": "http://thinkphp.cn/",
53
+            "keywords": [
54
+                "framework",
55
+                "orm",
56
+                "thinkphp"
57
+            ],
58
+            "support": {
59
+                "issues": "https://github.com/top-think/framework/issues",
60
+                "source": "https://github.com/top-think/framework/tree/v5.1.42"
61
+            },
62
+            "time": "2022-10-25T15:04:49+00:00"
63
+        },
64
+        {
65
+            "name": "topthink/think-helper",
66
+            "version": "v3.1.6",
67
+            "source": {
68
+                "type": "git",
69
+                "url": "https://github.com/top-think/think-helper.git",
70
+                "reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff"
71
+            },
72
+            "dist": {
73
+                "type": "zip",
74
+                "url": "https://api.github.com/repos/top-think/think-helper/zipball/769acbe50a4274327162f9c68ec2e89a38eb2aff",
75
+                "reference": "769acbe50a4274327162f9c68ec2e89a38eb2aff",
76
+                "shasum": ""
77
+            },
78
+            "require": {
79
+                "php": ">=7.1.0"
80
+            },
81
+            "require-dev": {
82
+                "phpunit/phpunit": "^9.5"
83
+            },
84
+            "type": "library",
85
+            "autoload": {
86
+                "files": [
87
+                    "src/helper.php"
88
+                ],
89
+                "psr-4": {
90
+                    "think\\": "src"
91
+                }
92
+            },
93
+            "notification-url": "https://packagist.org/downloads/",
94
+            "license": [
95
+                "Apache-2.0"
96
+            ],
97
+            "authors": [
98
+                {
99
+                    "name": "yunwuxin",
100
+                    "email": "448901948@qq.com"
101
+                }
102
+            ],
103
+            "description": "The ThinkPHP6 Helper Package",
104
+            "support": {
105
+                "issues": "https://github.com/top-think/think-helper/issues",
106
+                "source": "https://github.com/top-think/think-helper/tree/v3.1.6"
107
+            },
108
+            "time": "2021-12-15T04:27:55+00:00"
109
+        },
110
+        {
111
+            "name": "topthink/think-installer",
112
+            "version": "v2.0.5",
113
+            "source": {
114
+                "type": "git",
115
+                "url": "https://github.com/top-think/think-installer.git",
116
+                "reference": "38ba647706e35d6704b5d370c06f8a160b635f88"
117
+            },
118
+            "dist": {
119
+                "type": "zip",
120
+                "url": "https://api.github.com/repos/top-think/think-installer/zipball/38ba647706e35d6704b5d370c06f8a160b635f88",
121
+                "reference": "38ba647706e35d6704b5d370c06f8a160b635f88",
122
+                "shasum": ""
123
+            },
124
+            "require": {
125
+                "composer-plugin-api": "^1.0||^2.0"
126
+            },
127
+            "require-dev": {
128
+                "composer/composer": "^1.0||^2.0"
129
+            },
130
+            "type": "composer-plugin",
131
+            "extra": {
132
+                "class": "think\\composer\\Plugin"
133
+            },
134
+            "autoload": {
135
+                "psr-4": {
136
+                    "think\\composer\\": "src"
137
+                }
138
+            },
139
+            "notification-url": "https://packagist.org/downloads/",
140
+            "license": [
141
+                "Apache-2.0"
142
+            ],
143
+            "authors": [
144
+                {
145
+                    "name": "yunwuxin",
146
+                    "email": "448901948@qq.com"
147
+                }
148
+            ],
149
+            "support": {
150
+                "issues": "https://github.com/top-think/think-installer/issues",
151
+                "source": "https://github.com/top-think/think-installer/tree/v2.0.5"
152
+            },
153
+            "time": "2021-01-14T12:12:14+00:00"
154
+        },
155
+        {
156
+            "name": "topthink/think-queue",
157
+            "version": "v2.0.4",
158
+            "source": {
159
+                "type": "git",
160
+                "url": "https://github.com/top-think/think-queue.git",
161
+                "reference": "d9b8f38c7af8ad770257b0d7db711ce8b12a6969"
162
+            },
163
+            "dist": {
164
+                "type": "zip",
165
+                "url": "https://api.github.com/repos/top-think/think-queue/zipball/d9b8f38c7af8ad770257b0d7db711ce8b12a6969",
166
+                "reference": "d9b8f38c7af8ad770257b0d7db711ce8b12a6969",
167
+                "shasum": ""
168
+            },
169
+            "require": {
170
+                "topthink/framework": "5.1.*",
171
+                "topthink/think-helper": ">=1.0.4",
172
+                "topthink/think-installer": "^2.0"
173
+            },
174
+            "type": "think-extend",
175
+            "extra": {
176
+                "think-config": {
177
+                    "queue": "src/config.php"
178
+                }
179
+            },
180
+            "autoload": {
181
+                "files": [
182
+                    "src/common.php"
183
+                ],
184
+                "psr-4": {
185
+                    "think\\": "src"
186
+                }
187
+            },
188
+            "notification-url": "https://packagist.org/downloads/",
189
+            "license": [
190
+                "Apache-2.0"
191
+            ],
192
+            "authors": [
193
+                {
194
+                    "name": "yunwuxin",
195
+                    "email": "448901948@qq.com"
196
+                }
197
+            ],
198
+            "description": "The ThinkPHP5 Queue Package",
199
+            "support": {
200
+                "issues": "https://github.com/top-think/think-queue/issues",
201
+                "source": "https://github.com/top-think/think-queue/tree/2.0"
202
+            },
203
+            "time": "2018-05-11T06:55:55+00:00"
204
+        }
205
+    ],
206
+    "packages-dev": [],
207
+    "aliases": [],
208
+    "minimum-stability": "stable",
209
+    "stability-flags": [],
210
+    "prefer-stable": false,
211
+    "prefer-lowest": false,
212
+    "platform": {
213
+        "php": ">=5.6.0"
214
+    },
215
+    "platform-dev": [],
216
+    "plugin-api-version": "2.0.0"
217
+}

+ 147
- 0
config/app.php 查看文件

@@ -0,0 +1,147 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 应用设置
14
+// +----------------------------------------------------------------------
15
+
16
+return [
17
+    // 应用名称
18
+    'app_name'               => '',
19
+    // 应用地址
20
+    'app_host'               => '',
21
+    // 应用调试模式
22
+    'app_debug'              => true,
23
+    // 应用Trace
24
+    'app_trace'              => true,
25
+    // 是否支持多模块
26
+    'app_multi_module'       => true,
27
+    // 入口自动绑定模块
28
+    'auto_bind_module'       => false,
29
+    // 注册的根命名空间
30
+    'root_namespace'         => [],
31
+    // 默认输出类型
32
+    'default_return_type'    => 'html',
33
+    // 默认AJAX 数据返回格式,可选json xml ...
34
+    'default_ajax_return'    => 'json',
35
+    // 默认JSONP格式返回的处理方法
36
+    'default_jsonp_handler'  => 'jsonpReturn',
37
+    // 默认JSONP处理方法
38
+    'var_jsonp_handler'      => 'callback',
39
+    // 默认时区
40
+    'default_timezone'       => 'Asia/Shanghai',
41
+    // 是否开启多语言
42
+    'lang_switch_on'         => false,
43
+    // 默认全局过滤方法 用逗号分隔多个
44
+    'default_filter'         => '',
45
+    // 默认语言
46
+    'default_lang'           => 'zh-cn',
47
+    // 应用类库后缀
48
+    'class_suffix'           => false,
49
+    // 控制器类后缀
50
+    'controller_suffix'      => false,
51
+
52
+    // +----------------------------------------------------------------------
53
+    // | 模块设置
54
+    // +----------------------------------------------------------------------
55
+
56
+    // 默认模块名
57
+    'default_module'         => 'index',
58
+    // 禁止访问模块
59
+    'deny_module_list'       => ['common'],
60
+    // 默认控制器名
61
+    'default_controller'     => 'Index',
62
+    // 默认操作名
63
+    'default_action'         => 'index',
64
+    // 默认验证器
65
+    'default_validate'       => '',
66
+    // 默认的空模块名
67
+    'empty_module'           => '',
68
+    // 默认的空控制器名
69
+    'empty_controller'       => 'Error',
70
+    // 操作方法前缀
71
+    'use_action_prefix'      => false,
72
+    // 操作方法后缀
73
+    'action_suffix'          => '',
74
+    // 自动搜索控制器
75
+    'controller_auto_search' => false,
76
+
77
+    // +----------------------------------------------------------------------
78
+    // | URL设置
79
+    // +----------------------------------------------------------------------
80
+
81
+    // PATHINFO变量名 用于兼容模式
82
+    'var_pathinfo'           => 's',
83
+    // 兼容PATH_INFO获取
84
+    'pathinfo_fetch'         => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
85
+    // pathinfo分隔符
86
+    'pathinfo_depr'          => '/',
87
+    // HTTPS代理标识
88
+    'https_agent_name'       => '',
89
+    // IP代理获取标识
90
+    'http_agent_ip'          => 'X-REAL-IP',
91
+    // URL伪静态后缀
92
+    'url_html_suffix'        => 'html',
93
+    // URL普通方式参数 用于自动生成
94
+    'url_common_param'       => false,
95
+    // URL参数方式 0 按名称成对解析 1 按顺序解析
96
+    'url_param_type'         => 0,
97
+    // 是否开启路由延迟解析
98
+    'url_lazy_route'         => false,
99
+    // 是否强制使用路由
100
+    'url_route_must'         => false,
101
+    // 合并路由规则
102
+    'route_rule_merge'       => false,
103
+    // 路由是否完全匹配
104
+    'route_complete_match'   => false,
105
+    // 使用注解路由
106
+    'route_annotation'       => false,
107
+    // 域名根,如thinkphp.cn
108
+    'url_domain_root'        => '',
109
+    // 是否自动转换URL中的控制器和操作名
110
+    'url_convert'            => false,
111
+
112
+    // 默认的访问控制器层
113
+    'url_controller_layer'   => 'controller',
114
+    // 表单请求类型伪装变量
115
+    'var_method'             => '_method',
116
+    // 表单ajax伪装变量
117
+    'var_ajax'               => '_ajax',
118
+    // 表单pjax伪装变量
119
+    'var_pjax'               => '_pjax',
120
+    // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
121
+    'request_cache'          => false,
122
+    // 请求缓存有效期
123
+    'request_cache_expire'   => null,
124
+    // 全局请求缓存排除规则
125
+    'request_cache_except'   => [],
126
+    // 是否开启路由缓存
127
+    'route_check_cache'      => false,
128
+    // 路由缓存的Key自定义设置(闭包),默认为当前URL和请求类型的md5
129
+    'route_check_cache_key'  => '',
130
+    // 路由缓存类型及参数
131
+    'route_cache_option'     => [],
132
+
133
+    // 默认跳转页面对应的模板文件
134
+    'dispatch_success_tmpl'  => Env::get('think_path') . 'tpl/dispatch_jump.tpl',
135
+    'dispatch_error_tmpl'    => Env::get('think_path') . 'tpl/dispatch_jump.tpl',
136
+
137
+    // 异常页面的模板文件
138
+    'exception_tmpl'         => Env::get('think_path') . 'tpl/think_exception.tpl',
139
+
140
+    // 错误显示信息,非调试模式有效
141
+    'error_message'          => '页面错误!请稍后再试~',
142
+    // 显示错误信息
143
+    'show_error_msg'         => false,
144
+    // 异常处理handle类 留空使用 \think\exception\Handle
145
+    'exception_handle'       => '',
146
+
147
+];

+ 25
- 0
config/cache.php 查看文件

@@ -0,0 +1,25 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 缓存设置
14
+// +----------------------------------------------------------------------
15
+
16
+return [
17
+    // 驱动方式
18
+    'type'   => 'File',
19
+    // 缓存保存目录
20
+    'path'   => '',
21
+    // 缓存前缀
22
+    'prefix' => '',
23
+    // 缓存有效期 0表示永久缓存
24
+    'expire' => 0,
25
+];

+ 20
- 0
config/console.php 查看文件

@@ -0,0 +1,20 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 控制台配置
14
+// +----------------------------------------------------------------------
15
+return [
16
+    'name'      => 'Think Console',
17
+    'version'   => '0.1',
18
+    'user'      => null,
19
+    'auto_path' => env('app_path') . 'command' . DIRECTORY_SEPARATOR,
20
+];

+ 30
- 0
config/cookie.php 查看文件

@@ -0,0 +1,30 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | Cookie设置
14
+// +----------------------------------------------------------------------
15
+return [
16
+    // cookie 名称前缀
17
+    'prefix'    => '',
18
+    // cookie 保存时间
19
+    'expire'    => 0,
20
+    // cookie 保存路径
21
+    'path'      => '/',
22
+    // cookie 有效域名
23
+    'domain'    => '',
24
+    //  cookie 启用安全传输
25
+    'secure'    => false,
26
+    // httponly设置
27
+    'httponly'  => '',
28
+    // 是否使用 setcookie
29
+    'setcookie' => true,
30
+];

+ 84
- 0
config/database.php 查看文件

@@ -0,0 +1,84 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+return [
13
+    // 数据库类型
14
+    'type'            => 'mysql',
15
+    // 服务器地址
16
+    'hostname'        => '127.0.0.1',
17
+    // 数据库名
18
+    'database'        => 'queue_dev_zx2049',
19
+    // 用户名
20
+    'username'        => 'queue_dev_zx2049',
21
+    // 密码
22
+    'password'        => 'N5S5bcJDfDSHwrCs',
23
+    // 端口
24
+    'hostport'        => '3306',
25
+    // 连接dsn
26
+    'dsn'             => '',
27
+    // 数据库连接参数
28
+    'params'          => [],
29
+    // 数据库编码默认采用utf8
30
+    'charset'         => 'utf8',
31
+    // 数据库表前缀
32
+    'prefix'          => 'qu_',
33
+    // 数据库调试模式
34
+    'debug'           => true,
35
+    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
36
+    'deploy'          => 0,
37
+    // 数据库读写是否分离 主从式有效
38
+    'rw_separate'     => false,
39
+    // 读写分离后 主服务器数量
40
+    'master_num'      => 1,
41
+    // 指定从服务器序号
42
+    'slave_no'        => '',
43
+    // 自动读取主库数据
44
+    'read_master'     => false,
45
+    // 是否严格检查字段是否存在
46
+    'fields_strict'   => true,
47
+    // 数据集返回类型
48
+    'resultset_type'  => 'array',
49
+    // 自动写入时间戳字段
50
+    'auto_timestamp'  => false,
51
+    // 时间字段取出后的默认时间格式
52
+    'datetime_format' => 'Y-m-d H:i:s',
53
+    // 是否需要进行SQL性能分析
54
+    'sql_explain'     => false,
55
+    // Builder类
56
+    'builder'         => '',
57
+    // Query类
58
+    'query'           => '\\think\\db\\Query',
59
+    // 是否需要断线重连
60
+    'break_reconnect' => false,
61
+    // 断线标识字符串
62
+    'break_match_str' => [],
63
+    //远程业务1
64
+    'db1' => [
65
+        'type'            => 'mysql',
66
+        'hostname'        => '42.121.98.95',
67
+        'database'        => 'zc_dev_gdzcfw_co',
68
+        'username'        => 'zc_dev_gdzcfw_co',
69
+        'password'        => 'MjafNFNy5yk4YXhx',
70
+        'hostport'        => '',
71
+        'prefix'          => 'ey_',
72
+        // 其他的数据库连接参数...
73
+    ],
74
+    'console' => [
75
+        'type'            => 'mysql',
76
+        'hostname'        => '127.0.0.1',
77
+        'database'        => 'console_zx2049_c',
78
+        'username'        => 'console_zx2049_c',
79
+        'password'        => 'YGfWNYTxEAC85TX7',
80
+        'hostport'        => '',
81
+        'prefix'          => 'yzn_',
82
+        // 其他的数据库连接参数...
83
+    ],
84
+];

+ 30
- 0
config/log.php 查看文件

@@ -0,0 +1,30 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 日志设置
14
+// +----------------------------------------------------------------------
15
+return [
16
+    // 日志记录方式,内置 file socket 支持扩展
17
+    'type'        => 'File',
18
+    // 日志保存目录
19
+    'path'        => '',
20
+    // 日志记录级别
21
+    'level'       => [],
22
+    // 单文件日志写入
23
+    'single'      => false,
24
+    // 独立日志级别
25
+    'apart_level' => [],
26
+    // 最大日志文件数量
27
+    'max_files'   => 0,
28
+    // 是否关闭日志写入
29
+    'close'       => false,
30
+];

+ 18
- 0
config/middleware.php 查看文件

@@ -0,0 +1,18 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 中间件配置
14
+// +----------------------------------------------------------------------
15
+return [
16
+    // 默认中间件命名空间
17
+    'default_namespace' => 'app\\http\\middleware\\',
18
+];

+ 18
- 0
config/queue.php 查看文件

@@ -0,0 +1,18 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: yunwuxin <448901948@qq.com>
10
+// +----------------------------------------------------------------------
11
+
12
+return [
13
+    'connector' => 'Database',   // 数据库驱动
14
+    'expire'    => 60,           // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
15
+    'default'   => 'default',    // 默认的队列名称
16
+    'table'     => 'jobs',       // 存储消息的表名,不带前缀
17
+    'dsn'       => [],
18
+];

+ 26
- 0
config/session.php 查看文件

@@ -0,0 +1,26 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 会话设置
14
+// +----------------------------------------------------------------------
15
+
16
+return [
17
+    'id'             => '',
18
+    // SESSION_ID的提交变量,解决flash上传跨域
19
+    'var_session_id' => '',
20
+    // SESSION 前缀
21
+    'prefix'         => 'think',
22
+    // 驱动方式 支持redis memcache memcached
23
+    'type'           => '',
24
+    // 是否自动开启 SESSION
25
+    'auto_start'     => true,
26
+];

+ 35
- 0
config/template.php 查看文件

@@ -0,0 +1,35 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | 模板设置
14
+// +----------------------------------------------------------------------
15
+
16
+return [
17
+    // 模板引擎类型 支持 php think 支持扩展
18
+    'type'         => 'Think',
19
+    // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法
20
+    'auto_rule'    => 1,
21
+    // 模板路径
22
+    'view_path'    => '',
23
+    // 模板后缀
24
+    'view_suffix'  => 'html',
25
+    // 模板文件名分隔符
26
+    'view_depr'    => DIRECTORY_SEPARATOR,
27
+    // 模板引擎普通标签开始标记
28
+    'tpl_begin'    => '{',
29
+    // 模板引擎普通标签结束标记
30
+    'tpl_end'      => '}',
31
+    // 标签库标签开始标记
32
+    'taglib_begin' => '{',
33
+    // 标签库标签结束标记
34
+    'taglib_end'   => '}',
35
+];

+ 18
- 0
config/trace.php 查看文件

@@ -0,0 +1,18 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// +----------------------------------------------------------------------
13
+// | Trace设置 开启 app_trace 后 有效
14
+// +----------------------------------------------------------------------
15
+return [
16
+    // 内置Html Console 支持扩展
17
+    'type' => 'Html',
18
+];

+ 2
- 0
extend/.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 8
- 0
public/.htaccess 查看文件

@@ -0,0 +1,8 @@
1
+<IfModule mod_rewrite.c>
2
+  Options +FollowSymlinks -Multiviews
3
+  RewriteEngine On
4
+
5
+  RewriteCond %{REQUEST_FILENAME} !-d
6
+  RewriteCond %{REQUEST_FILENAME} !-f
7
+  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
8
+</IfModule>

+ 1
- 0
public/.user.ini 查看文件

@@ -0,0 +1 @@
1
+open_basedir=/www/wwwroot/queue.dev.zx2049.com/tp5/:/tmp/

二进制
public/favicon.ico 查看文件


+ 21
- 0
public/index.php 查看文件

@@ -0,0 +1,21 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+// [ 应用入口文件 ]
13
+namespace think;
14
+
15
+// 加载基础文件
16
+require __DIR__ . '/../thinkphp/base.php';
17
+
18
+// 支持事先使用静态方法设置Request对象和Config对象
19
+
20
+// 执行应用并响应
21
+Container::get('app')->run()->send();

+ 2
- 0
public/robots.txt 查看文件

@@ -0,0 +1,2 @@
1
+User-agent: *
2
+Disallow:

+ 17
- 0
public/router.php 查看文件

@@ -0,0 +1,17 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+// $Id$
12
+
13
+if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) {
14
+    return false;
15
+} else {
16
+    require __DIR__ . "/index.php";
17
+}

+ 2
- 0
public/static/.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 20
- 0
route/route.php 查看文件

@@ -0,0 +1,20 @@
1
+<?php
2
+// +----------------------------------------------------------------------
3
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
4
+// +----------------------------------------------------------------------
5
+// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
6
+// +----------------------------------------------------------------------
7
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
8
+// +----------------------------------------------------------------------
9
+// | Author: liu21st <liu21st@gmail.com>
10
+// +----------------------------------------------------------------------
11
+
12
+Route::get('think', function () {
13
+    return 'hello,ThinkPHP5!';
14
+});
15
+
16
+Route::get('hello/:name', 'index/hello');
17
+
18
+return [
19
+
20
+];

+ 2
- 0
runtime/.gitignore 查看文件

@@ -0,0 +1,2 @@
1
+*
2
+!.gitignore

+ 22
- 0
think 查看文件

@@ -0,0 +1,22 @@
1
+#!/usr/bin/env php
2
+<?php
3
+// +----------------------------------------------------------------------
4
+// | ThinkPHP [ WE CAN DO IT JUST THINK ]
5
+// +----------------------------------------------------------------------
6
+// | Copyright (c) 2006-2018 http://thinkphp.cn All rights reserved.
7
+// +----------------------------------------------------------------------
8
+// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
9
+// +----------------------------------------------------------------------
10
+// | Author: yunwuxin <448901948@qq.com>
11
+// +----------------------------------------------------------------------
12
+
13
+namespace think;
14
+
15
+// 加载基础文件
16
+require __DIR__ . '/thinkphp/base.php';
17
+
18
+// 应用初始化
19
+Container::get('app')->path(__DIR__ . '/application/')->initialize();
20
+
21
+// 控制台初始化
22
+Console::init();

正在加载...
取消
保存