diff --git a/.example.env b/.example.env
new file mode 100644
index 0000000000000000000000000000000000000000..c27f74caea59e0bc78bae1941793a6ac34c85a9c
--- /dev/null
+++ b/.example.env
@@ -0,0 +1 @@
+APP_DEBUG = true
[APP]
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
[LANG]
default_lang = zh-cn
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 7846e89ed9dea7fce9f4bd48b0f23b7b64100362..d465120e74b813c80d55c418ed3cab757a22033c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,5 @@
-.idea
-composer.lock
+/.idea
+/.vscode
+/vendor
*.log
-thinkphp
+.env
\ No newline at end of file
diff --git a/README.md b/README.md
index 81cf109fa26d2ce273f409e9ad292dc376ee5133..091b52ff7a7c04b585e049ae334bc4c89eff9e3a 100644
--- a/README.md
+++ b/README.md
@@ -1,129 +1,56 @@
-ThinkPHP 5.0
-===============
-
-[](https://packagist.org/packages/topthink/think)
-[](https://packagist.org/packages/topthink/think)
-[](https://packagist.org/packages/topthink/think)
-[](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)
-
-## 目录结构
-
-初始的目录结构如下:
-
-~~~
-www WEB部署目录(或者子目录)
-├─application 应用目录
-│ ├─common 公共模块目录(可以更改)
-│ ├─module_name 模块目录
-│ │ ├─config.php 模块配置文件
-│ │ ├─common.php 模块函数文件
-│ │ ├─controller 控制器目录
-│ │ ├─model 模型目录
-│ │ ├─view 视图目录
-│ │ └─ ... 更多类库目录
-│ │
-│ ├─command.php 命令行工具配置文件
-│ ├─common.php 公共函数文件
-│ ├─config.php 公共配置文件
-│ ├─route.php 路由配置文件
-│ ├─tags.php 应用行为扩展定义文件
-│ └─database.php 数据库配置文件
-│
-├─public WEB目录(对外访问目录)
-│ ├─index.php 入口文件
-│ ├─router.php 快速测试文件
-│ └─.htaccess 用于apache的重写
-│
-├─thinkphp 框架系统目录
-│ ├─lang 语言文件目录
-│ ├─library 框架类库目录
-│ │ ├─think Think类库包目录
-│ │ └─traits 系统Trait目录
-│ │
-│ ├─tpl 系统模板目录
-│ ├─base.php 基础定义文件
-│ ├─console.php 控制台入口文件
-│ ├─convention.php 框架惯例配置文件
-│ ├─helper.php 助手函数文件
-│ ├─phpunit.xml phpunit配置文件
-│ └─start.php 框架入口文件
-│
-├─extend 扩展类库目录
-├─runtime 应用的运行时目录(可写,可定制)
-├─vendor 第三方类库目录(Composer依赖库)
-├─build.php 自动生成定义文件(参考)
-├─composer.json composer 定义文件
-├─LICENSE.txt 授权说明文件
-├─README.md README 文件
-├─think 命令行入口文件
-~~~
-
-> router.php用于php自带webserver支持,可用于快速测试
-> 切换到public目录后,启动命令:php -S localhost:8888 router.php
-> 上面的目录结构和名称是可以改变的,这取决于你的入口文件和配置参数。
-
-## 命名规范
-
-`ThinkPHP5`遵循PSR-2命名规范和PSR-4自动加载规范,并且注意如下规范:
-
-### 目录和文件
-
-* 目录不强制规范,驼峰和小写+下划线模式均支持;
-* 类库、函数文件统一以`.php`为后缀;
-* 类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致;
-* 类名和类文件名保持一致,统一采用驼峰法命名(首字母大写);
-
-### 函数和类、属性命名
-* 类的命名采用驼峰法,并且首字母大写,例如 `User`、`UserType`,默认不需要添加后缀,例如`UserController`应该直接命名为`User`;
-* 函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 `get_client_ip`;
-* 方法的命名使用驼峰法,并且首字母小写,例如 `getUserName`;
-* 属性的命名使用驼峰法,并且首字母小写,例如 `tableName`、`instance`;
-* 以双下划线“__”打头的函数或方法作为魔法方法,例如 `__call` 和 `__autoload`;
-
-### 常量和配置
-* 常量以大写字母和下划线命名,例如 `APP_PATH`和 `THINK_PATH`;
-* 配置参数以小写字母和下划线命名,例如 `url_route_on` 和`url_convert`;
-
-### 数据表和字段
-* 数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如 `think_user` 表和 `user_name`字段,不建议使用驼峰和中文作为数据表字段命名。
-
-## 参与开发
-请参阅 [ThinkPHP5 核心框架包](https://github.com/top-think/framework)。
-
-## 版权信息
-
-ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
-
-本项目包含的第三方源码和二进制文件之版权信息另行标注。
-
-版权所有Copyright © 2006-2017 by ThinkPHP (http://thinkphp.cn)
-
-All rights reserved。
-
-ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
-
-更多细节参阅 [LICENSE.txt](LICENSE.txt)
+ThinkPHP 6.0
+===============
+
+> 运行环境要求PHP7.1+,兼容PHP8.0。
+
+[官方应用服务市场](https://market.topthink.com) | [`ThinkAPI`——官方统一API服务](https://docs.topthink.com/think-api)
+
+ThinkPHPV6.0版本由[亿速云](https://www.yisu.com/)独家赞助发布。
+
+## 主要新特性
+
+* 采用`PHP7`强类型(严格模式)
+* 支持更多的`PSR`规范
+* 原生多应用支持
+* 更强大和易用的查询
+* 全新的事件系统
+* 模型事件和数据库事件统一纳入事件系统
+* 模板引擎分离出核心
+* 内部功能中间件化
+* SESSION/Cookie机制改进
+* 对Swoole以及协程支持改进
+* 对IDE更加友好
+* 统一和精简大量用法
+
+## 安装
+
+~~~
+composer create-project topthink/think tp 6.0.*
+~~~
+
+如果需要更新框架使用
+~~~
+composer update topthink/framework
+~~~
+
+## 文档
+
+[完全开发手册](https://www.kancloud.cn/manual/thinkphp6_0/content)
+
+## 参与开发
+
+请参阅 [ThinkPHP 核心框架包](https://github.com/top-think/framework)。
+
+## 版权信息
+
+ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
+
+本项目包含的第三方源码和二进制文件之版权信息另行标注。
+
+版权所有Copyright © 2006-2020 by ThinkPHP (http://thinkphp.cn)
+
+All rights reserved。
+
+ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
+
+更多细节参阅 [LICENSE.txt](LICENSE.txt)
diff --git a/application/.htaccess b/app/.htaccess
similarity index 100%
rename from application/.htaccess
rename to app/.htaccess
diff --git a/app/AppService.php b/app/AppService.php
new file mode 100644
index 0000000000000000000000000000000000000000..96556e88e2abe4becd210e99166be1ad855c5cf5
--- /dev/null
+++ b/app/AppService.php
@@ -0,0 +1,22 @@
+app = $app;
+ $this->request = $this->app->request;
+
+ // 控制器初始化
+ $this->initialize();
+ }
+
+ // 初始化
+ protected function initialize()
+ {}
+
+ /**
+ * 验证数据
+ * @access protected
+ * @param array $data 数据
+ * @param string|array $validate 验证器名或者验证规则数组
+ * @param array $message 提示信息
+ * @param bool $batch 是否批量验证
+ * @return array|string|true
+ * @throws ValidateException
+ */
+ protected function validate(array $data, $validate, array $message = [], bool $batch = false)
+ {
+ if (is_array($validate)) {
+ $v = new Validate();
+ $v->rule($validate);
+ } else {
+ if (strpos($validate, '.')) {
+ // 支持场景
+ [$validate, $scene] = explode('.', $validate);
+ }
+ $class = false !== strpos($validate, '\\') ? $validate : $this->app->parseClass('validate', $validate);
+ $v = new $class();
+ if (!empty($scene)) {
+ $v->scene($scene);
+ }
+ }
+
+ $v->message($message);
+
+ // 是否批量验证
+ if ($batch || $this->batchValidate) {
+ $v->batch(true);
+ }
+
+ return $v->failException(true)->check($data);
+ }
+
+}
diff --git a/app/ExceptionHandle.php b/app/ExceptionHandle.php
new file mode 100644
index 0000000000000000000000000000000000000000..453d1260ecae632f8edf14955ae6561842ac0e04
--- /dev/null
+++ b/app/ExceptionHandle.php
@@ -0,0 +1,58 @@
+*{ 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 }
:)
ThinkPHP V' . \think\facade\App::version() . '
14载初心不改 - 你值得信赖的PHP框架
[ V6.0 版本由 亿速云 独家赞助发布 ] ';
+ }
+
+ public function hello($name = 'ThinkPHP6')
+ {
+ return 'hello,' . $name;
+ }
+}
diff --git a/app/event.php b/app/event.php
new file mode 100644
index 0000000000000000000000000000000000000000..e9851bb58e2f3ac219582c1c08e023fbaf06b9a1
--- /dev/null
+++ b/app/event.php
@@ -0,0 +1,17 @@
+ [
+ ],
+
+ 'listen' => [
+ 'AppInit' => [],
+ 'HttpRun' => [],
+ 'HttpEnd' => [],
+ 'LogLevel' => [],
+ 'LogWrite' => [],
+ ],
+
+ 'subscribe' => [
+ ],
+];
diff --git a/app/middleware.php b/app/middleware.php
new file mode 100644
index 0000000000000000000000000000000000000000..d2c3fda10f1176dd5b96d54f9bb9a5ad84ec1de7
--- /dev/null
+++ b/app/middleware.php
@@ -0,0 +1,10 @@
+ Request::class,
+ 'think\exception\Handle' => ExceptionHandle::class,
+];
diff --git a/app/service.php b/app/service.php
new file mode 100644
index 0000000000000000000000000000000000000000..db1ee6a89fadf0adec23808a3272bb3724a412e5
--- /dev/null
+++ b/app/service.php
@@ -0,0 +1,9 @@
+
-// +----------------------------------------------------------------------
-
-// 应用公共文件
diff --git a/application/config.php b/application/config.php
deleted file mode 100644
index 21c0531f709bdc8de3e2d64d91832870a3b4e77f..0000000000000000000000000000000000000000
--- a/application/config.php
+++ /dev/null
@@ -1,239 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-return [
- // +----------------------------------------------------------------------
- // | 应用设置
- // +----------------------------------------------------------------------
-
- // 应用命名空间
- 'app_namespace' => 'app',
- // 应用调试模式
- 'app_debug' => true,
- // 应用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 ...
- 'default_ajax_return' => 'json',
- // 默认JSONP格式返回的处理方法
- 'default_jsonp_handler' => 'jsonpReturn',
- // 默认JSONP处理方法
- 'var_jsonp_handler' => 'callback',
- // 默认时区
- 'default_timezone' => 'PRC',
- // 是否开启多语言
- 'lang_switch_on' => false,
- // 默认全局过滤方法 用逗号分隔多个
- 'default_filter' => '',
- // 默认语言
- 'default_lang' => 'zh-cn',
- // 应用类库后缀
- 'class_suffix' => false,
- // 控制器类后缀
- 'controller_suffix' => false,
-
- // +----------------------------------------------------------------------
- // | 模块设置
- // +----------------------------------------------------------------------
-
- // 默认模块名
- 'default_module' => 'index',
- // 禁止访问模块
- 'deny_module_list' => ['common'],
- // 默认控制器名
- 'default_controller' => 'Index',
- // 默认操作名
- 'default_action' => 'index',
- // 默认验证器
- 'default_validate' => '',
- // 默认的空控制器名
- 'empty_controller' => 'Error',
- // 操作方法后缀
- 'action_suffix' => '',
- // 自动搜索控制器
- 'controller_auto_search' => false,
-
- // +----------------------------------------------------------------------
- // | URL设置
- // +----------------------------------------------------------------------
-
- // PATHINFO变量名 用于兼容模式
- 'var_pathinfo' => 's',
- // 兼容PATH_INFO获取
- 'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],
- // pathinfo分隔符
- 'pathinfo_depr' => '/',
- // 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_route_must' => false,
- // 域名部署
- 'url_domain_deploy' => false,
- // 域名根,如thinkphp.cn
- 'url_domain_root' => '',
- // 是否自动转换URL中的控制器和操作名
- 'url_convert' => true,
- // 默认的访问控制器层
- 'url_controller_layer' => 'controller',
- // 表单请求类型伪装变量
- 'var_method' => '_method',
- // 表单ajax伪装变量
- 'var_ajax' => '_ajax',
- // 表单pjax伪装变量
- 'var_pjax' => '_pjax',
- // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
- 'request_cache' => false,
- // 请求缓存有效期
- 'request_cache_expire' => null,
-
- // +----------------------------------------------------------------------
- // | 模板设置
- // +----------------------------------------------------------------------
-
- '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',
-
- // +----------------------------------------------------------------------
- // | 异常及错误设置
- // +----------------------------------------------------------------------
-
- // 异常页面的模板文件
- 'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl',
-
- // 错误显示信息,非调试模式有效
- 'error_message' => '页面错误!请稍后再试~',
- // 显示错误信息
- 'show_error_msg' => false,
- // 异常处理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/application/database.php b/application/database.php
deleted file mode 100644
index 4caac2f14a68cb3cb4741a406a24743ba48f904b..0000000000000000000000000000000000000000
--- a/application/database.php
+++ /dev/null
@@ -1,53 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-return [
- // 数据库类型
- 'type' => 'mysql',
- // 服务器地址
- 'hostname' => '127.0.0.1',
- // 数据库名
- 'database' => '',
- // 用户名
- 'username' => 'root',
- // 密码
- 'password' => '',
- // 端口
- 'hostport' => '',
- // 连接dsn
- 'dsn' => '',
- // 数据库连接参数
- 'params' => [],
- // 数据库编码默认采用utf8
- 'charset' => 'utf8',
- // 数据库表前缀
- 'prefix' => '',
- // 数据库调试模式
- 'debug' => true,
- // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
- 'deploy' => 0,
- // 数据库读写是否分离 主从式有效
- 'rw_separate' => false,
- // 读写分离后 主服务器数量
- 'master_num' => 1,
- // 指定从服务器序号
- 'slave_no' => '',
- // 是否严格检查字段是否存在
- 'fields_strict' => true,
- // 数据集返回类型
- 'resultset_type' => 'array',
- // 自动写入时间戳字段
- 'auto_timestamp' => false,
- // 时间字段取出后的默认时间格式
- 'datetime_format' => 'Y-m-d H:i:s',
- // 是否需要进行SQL性能分析
- 'sql_explain' => false,
-];
diff --git a/application/index/controller/Index.php b/application/index/controller/Index.php
deleted file mode 100644
index 2ab0697ba33fa16b2aa5315fb705fcec7b25acf2..0000000000000000000000000000000000000000
--- a/application/index/controller/Index.php
+++ /dev/null
@@ -1,10 +0,0 @@
-*{ padding: 0; margin: 0; } .think_default_text{ 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 } :)
ThinkPHP V5
十年磨一剑 - 为API开发设计的高性能框架
[ V5.0 版本由 七牛云 独家赞助发布 ] ';
- }
-}
diff --git a/application/route.php b/application/route.php
deleted file mode 100644
index f648d3b4ead0af6c74c91c6d95bd1268771d65ca..0000000000000000000000000000000000000000
--- a/application/route.php
+++ /dev/null
@@ -1,21 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-return [
- '__pattern__' => [
- 'name' => '\w+',
- ],
- '[hello]' => [
- ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
- ':name' => ['index/hello', ['method' => 'post']],
- ],
-
-];
diff --git a/application/tags.php b/application/tags.php
deleted file mode 100644
index e213e0aae025a07c5e061a55db8ebafe1aa373f5..0000000000000000000000000000000000000000
--- a/application/tags.php
+++ /dev/null
@@ -1,28 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-// 应用行为扩展定义文件
-return [
- // 应用初始化
- 'app_init' => [],
- // 应用开始
- 'app_begin' => [],
- // 模块初始化
- 'module_init' => [],
- // 操作开始执行
- 'action_begin' => [],
- // 视图内容过滤
- 'view_filter' => [],
- // 日志写入
- 'log_write' => [],
- // 应用结束
- 'app_end' => [],
-];
diff --git a/build.php b/build.php
deleted file mode 100644
index b37d3abed850dc9e617d3d6aedc1da0e9dcb93a3..0000000000000000000000000000000000000000
--- a/build.php
+++ /dev/null
@@ -1,25 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-return [
- // 生成应用公共文件
- '__file__' => ['common.php', 'config.php', 'database.php'],
-
- // 定义demo模块的自动生成 (按照实际定义的文件名生成)
- 'demo' => [
- '__file__' => ['common.php'],
- '__dir__' => ['behavior', 'controller', 'model', 'view'],
- 'controller' => ['Index', 'Test', 'UserType'],
- 'model' => ['User', 'UserType'],
- 'view' => ['index/index'],
- ],
- // 其他更多的模块定义
-];
diff --git a/composer.json b/composer.json
index c4de66b83dfe11773b48e8057830105eb0b5f058..387c8b6cca6771f163bbc1edf7ac7dd36a9d6d1d 100644
--- a/composer.json
+++ b/composer.json
@@ -1,28 +1,48 @@
-{
- "name": "topthink/think",
- "description": "the new thinkphp framework",
- "type": "project",
- "keywords": [
- "framework",
- "thinkphp",
- "ORM"
- ],
- "homepage": "http://thinkphp.cn/",
- "license": "Apache-2.0",
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "require": {
- "php": ">=5.4.0",
- "topthink/framework": "^5.0"
- },
- "extra": {
- "think-path": "thinkphp"
- },
- "config": {
- "preferred-install": "dist"
- }
-}
+{
+ "name": "topthink/think",
+ "description": "the new thinkphp framework",
+ "type": "project",
+ "keywords": [
+ "framework",
+ "thinkphp",
+ "ORM"
+ ],
+ "homepage": "http://thinkphp.cn/",
+ "license": "Apache-2.0",
+ "authors": [
+ {
+ "name": "liu21st",
+ "email": "liu21st@gmail.com"
+ },
+ {
+ "name": "yunwuxin",
+ "email": "448901948@qq.com"
+ }
+ ],
+ "require": {
+ "php": ">=7.1.0",
+ "topthink/framework": "^6.0.0",
+ "topthink/think-orm": "^2.0"
+ },
+ "require-dev": {
+ "symfony/var-dumper": "^4.2",
+ "topthink/think-trace":"^1.0"
+ },
+ "autoload": {
+ "psr-4": {
+ "app\\": "app"
+ },
+ "psr-0": {
+ "": "extend/"
+ }
+ },
+ "config": {
+ "preferred-install": "dist"
+ },
+ "scripts": {
+ "post-autoload-dump": [
+ "@php think service:discover",
+ "@php think vendor:publish"
+ ]
+ }
+}
diff --git a/config/app.php b/config/app.php
new file mode 100644
index 0000000000000000000000000000000000000000..4da285ec3d79259b57e566c4ee7d653dfa6bdf30
--- /dev/null
+++ b/config/app.php
@@ -0,0 +1,32 @@
+ env('app.host', ''),
+ // 应用的命名空间
+ 'app_namespace' => '',
+ // 是否启用路由
+ 'with_route' => true,
+ // 默认应用
+ 'default_app' => 'index',
+ // 默认时区
+ 'default_timezone' => 'Asia/Shanghai',
+
+ // 应用映射(自动多应用模式有效)
+ 'app_map' => [],
+ // 域名绑定(自动多应用模式有效)
+ 'domain_bind' => [],
+ // 禁止URL访问的应用列表(自动多应用模式有效)
+ 'deny_app_list' => [],
+
+ // 异常页面的模板文件
+ 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl',
+
+ // 错误显示信息,非调试模式有效
+ 'error_message' => '页面错误!请稍后再试~',
+ // 显示错误信息
+ 'show_error_msg' => false,
+];
diff --git a/config/cache.php b/config/cache.php
new file mode 100644
index 0000000000000000000000000000000000000000..a8d69d247be95ccf50446556d71ec782080a56bb
--- /dev/null
+++ b/config/cache.php
@@ -0,0 +1,29 @@
+ env('cache.driver', 'file'),
+
+ // 缓存连接方式配置
+ 'stores' => [
+ 'file' => [
+ // 驱动方式
+ 'type' => 'File',
+ // 缓存保存目录
+ 'path' => '',
+ // 缓存前缀
+ 'prefix' => '',
+ // 缓存有效期 0表示永久缓存
+ 'expire' => 0,
+ // 缓存标签前缀
+ 'tag_prefix' => 'tag:',
+ // 序列化机制 例如 ['serialize', 'unserialize']
+ 'serialize' => [],
+ ],
+ // 更多的缓存连接
+ ],
+];
diff --git a/config/console.php b/config/console.php
new file mode 100644
index 0000000000000000000000000000000000000000..a818a9800951114c99173356086b5906b6d2eb4c
--- /dev/null
+++ b/config/console.php
@@ -0,0 +1,9 @@
+ [
+ ],
+];
diff --git a/config/cookie.php b/config/cookie.php
new file mode 100644
index 0000000000000000000000000000000000000000..d3b3aab925a32374481749793a5b71fdc3e89569
--- /dev/null
+++ b/config/cookie.php
@@ -0,0 +1,20 @@
+ 0,
+ // cookie 保存路径
+ 'path' => '/',
+ // cookie 有效域名
+ 'domain' => '',
+ // cookie 启用安全传输
+ 'secure' => false,
+ // httponly设置
+ 'httponly' => false,
+ // 是否使用 setcookie
+ 'setcookie' => true,
+ // samesite 设置,支持 'strict' 'lax'
+ 'samesite' => '',
+];
diff --git a/config/database.php b/config/database.php
new file mode 100644
index 0000000000000000000000000000000000000000..290e00924dcd22ec277fa5d59adc2eee363f0860
--- /dev/null
+++ b/config/database.php
@@ -0,0 +1,60 @@
+ env('database.driver', 'mysql'),
+
+ // 自定义时间查询规则
+ 'time_query_rule' => [],
+
+ // 自动写入时间戳字段
+ // true为自动识别类型 false关闭
+ // 字符串则明确指定时间字段类型 支持 int timestamp datetime date
+ 'auto_timestamp' => true,
+
+ // 时间字段取出后的默认时间格式
+ 'datetime_format' => 'Y-m-d H:i:s',
+
+ // 数据库连接配置信息
+ 'connections' => [
+ 'mysql' => [
+ // 数据库类型
+ 'type' => env('database.type', 'mysql'),
+ // 服务器地址
+ 'hostname' => env('database.hostname', '127.0.0.1'),
+ // 数据库名
+ 'database' => env('database.database', ''),
+ // 用户名
+ 'username' => env('database.username', 'root'),
+ // 密码
+ 'password' => env('database.password', ''),
+ // 端口
+ 'hostport' => env('database.hostport', '3306'),
+ // 数据库连接参数
+ 'params' => [],
+ // 数据库编码默认采用utf8
+ 'charset' => env('database.charset', 'utf8'),
+ // 数据库表前缀
+ 'prefix' => env('database.prefix', ''),
+
+ // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
+ 'deploy' => 0,
+ // 数据库读写是否分离 主从式有效
+ 'rw_separate' => false,
+ // 读写分离后 主服务器数量
+ 'master_num' => 1,
+ // 指定从服务器序号
+ 'slave_no' => '',
+ // 是否严格检查字段是否存在
+ 'fields_strict' => true,
+ // 是否需要断线重连
+ 'break_reconnect' => false,
+ // 监听SQL
+ 'trigger_sql' => env('app_debug', true),
+ // 开启字段缓存
+ 'fields_cache' => false,
+ ],
+
+ // 更多的数据库配置信息
+ ],
+];
diff --git a/config/filesystem.php b/config/filesystem.php
new file mode 100644
index 0000000000000000000000000000000000000000..965297e8f471c082fb48395c09a1c15753c7c31e
--- /dev/null
+++ b/config/filesystem.php
@@ -0,0 +1,24 @@
+ env('filesystem.driver', 'local'),
+ // 磁盘列表
+ 'disks' => [
+ 'local' => [
+ 'type' => 'local',
+ 'root' => app()->getRuntimePath() . 'storage',
+ ],
+ 'public' => [
+ // 磁盘类型
+ 'type' => 'local',
+ // 磁盘路径
+ 'root' => app()->getRootPath() . 'public/storage',
+ // 磁盘路径对应的外部URL路径
+ 'url' => '/storage',
+ // 可见性
+ 'visibility' => 'public',
+ ],
+ // 更多的磁盘配置信息
+ ],
+];
diff --git a/config/lang.php b/config/lang.php
new file mode 100644
index 0000000000000000000000000000000000000000..59f320ffd7c568df4aeb9ac751de08616268a16b
--- /dev/null
+++ b/config/lang.php
@@ -0,0 +1,27 @@
+ env('lang.default_lang', 'zh-cn'),
+ // 允许的语言列表
+ 'allow_lang_list' => [],
+ // 多语言自动侦测变量名
+ 'detect_var' => 'lang',
+ // 是否使用Cookie记录
+ 'use_cookie' => true,
+ // 多语言cookie变量
+ 'cookie_var' => 'think_lang',
+ // 多语言header变量
+ 'header_var' => 'think-lang',
+ // 扩展语言包
+ 'extend_list' => [],
+ // Accept-Language转义为对应语言包名称
+ 'accept_language' => [
+ 'zh-hans-cn' => 'zh-cn',
+ ],
+ // 是否支持语言分组
+ 'allow_group' => false,
+];
diff --git a/config/log.php b/config/log.php
new file mode 100644
index 0000000000000000000000000000000000000000..ea24ff9d26657863f36b69824896780b6755ca96
--- /dev/null
+++ b/config/log.php
@@ -0,0 +1,45 @@
+ env('log.channel', 'file'),
+ // 日志记录级别
+ 'level' => [],
+ // 日志类型记录的通道 ['error'=>'email',...]
+ 'type_channel' => [],
+ // 关闭全局日志写入
+ 'close' => false,
+ // 全局日志处理 支持闭包
+ 'processor' => null,
+
+ // 日志通道列表
+ 'channels' => [
+ 'file' => [
+ // 日志记录方式
+ 'type' => 'File',
+ // 日志保存目录
+ 'path' => '',
+ // 单文件日志写入
+ 'single' => false,
+ // 独立日志级别
+ 'apart_level' => [],
+ // 最大日志文件数量
+ 'max_files' => 0,
+ // 使用JSON格式记录
+ 'json' => false,
+ // 日志处理
+ 'processor' => null,
+ // 关闭通道日志写入
+ 'close' => false,
+ // 日志输出格式化
+ 'format' => '[%s][%s] %s',
+ // 是否实时写入
+ 'realtime_write' => false,
+ ],
+ // 其它日志通道配置
+ ],
+
+];
diff --git a/config/middleware.php b/config/middleware.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e1972f5a09c7f09a1801dca6742e1971cc4e26d
--- /dev/null
+++ b/config/middleware.php
@@ -0,0 +1,8 @@
+ [],
+ // 优先级设置,此数组中的中间件会按照数组中的顺序优先执行
+ 'priority' => [],
+];
diff --git a/config/route.php b/config/route.php
new file mode 100644
index 0000000000000000000000000000000000000000..2f4cd12902712b07c826a16d7653399c45184a44
--- /dev/null
+++ b/config/route.php
@@ -0,0 +1,45 @@
+ '/',
+ // URL伪静态后缀
+ 'url_html_suffix' => 'html',
+ // URL普通方式参数 用于自动生成
+ 'url_common_param' => true,
+ // 是否开启路由延迟解析
+ 'url_lazy_route' => false,
+ // 是否强制使用路由
+ 'url_route_must' => false,
+ // 合并路由规则
+ 'route_rule_merge' => false,
+ // 路由是否完全匹配
+ 'route_complete_match' => false,
+ // 访问控制器层名称
+ 'controller_layer' => 'controller',
+ // 空控制器名
+ 'empty_controller' => 'Error',
+ // 是否使用控制器后缀
+ 'controller_suffix' => false,
+ // 默认的路由变量规则
+ 'default_route_pattern' => '[\w\.]+',
+ // 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
+ 'request_cache_key' => false,
+ // 请求缓存有效期
+ 'request_cache_expire' => null,
+ // 全局请求缓存排除规则
+ 'request_cache_except' => [],
+ // 默认控制器名
+ 'default_controller' => 'Index',
+ // 默认操作名
+ 'default_action' => 'index',
+ // 操作方法后缀
+ 'action_suffix' => '',
+ // 默认JSONP格式返回的处理方法
+ 'default_jsonp_handler' => 'jsonpReturn',
+ // 默认JSONP处理方法
+ 'var_jsonp_handler' => 'callback',
+];
diff --git a/config/session.php b/config/session.php
new file mode 100644
index 0000000000000000000000000000000000000000..c1ef6e16d3d96f671bae7842196338ab0347ca7d
--- /dev/null
+++ b/config/session.php
@@ -0,0 +1,19 @@
+ 'PHPSESSID',
+ // SESSION_ID的提交变量,解决flash上传跨域
+ 'var_session_id' => '',
+ // 驱动方式 支持file cache
+ 'type' => 'file',
+ // 存储连接标识 当type使用cache的时候有效
+ 'store' => null,
+ // 过期时间
+ 'expire' => 1440,
+ // 前缀
+ 'prefix' => '',
+];
diff --git a/config/view.php b/config/view.php
new file mode 100644
index 0000000000000000000000000000000000000000..01259a0ef527b6a92d8eb31f4d89cd3bdb369579
--- /dev/null
+++ b/config/view.php
@@ -0,0 +1,25 @@
+ 'Think',
+ // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法
+ 'auto_rule' => 1,
+ // 模板目录名
+ 'view_dir_name' => 'view',
+ // 模板后缀
+ 'view_suffix' => 'html',
+ // 模板文件名分隔符
+ 'view_depr' => DIRECTORY_SEPARATOR,
+ // 模板引擎普通标签开始标记
+ 'tpl_begin' => '{',
+ // 模板引擎普通标签结束标记
+ 'tpl_end' => '}',
+ // 标签库标签开始标记
+ 'taglib_begin' => '{',
+ // 标签库标签结束标记
+ 'taglib_end' => '}',
+];
diff --git a/public/index.php b/public/index.php
index 6b7ec30e0f2a31842df31e99dfc7a7a3ae74b8a2..e3c0fe9083c5540d7149b1277acc679ea18ed48e 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-2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
@@ -10,8 +10,15 @@
// +----------------------------------------------------------------------
// [ 应用入口文件 ]
+namespace think;
-// 定义应用目录
-define('APP_PATH', __DIR__ . '/../application/');
-// 加载框架引导文件
-require __DIR__ . '/../thinkphp/start.php';
+require __DIR__ . '/../vendor/autoload.php';
+
+// 执行HTTP应用并响应
+$http = (new App())->http;
+
+$response = $http->run();
+
+$response->send();
+
+$http->end($response);
diff --git a/public/router.php b/public/router.php
index 6ba1fabf9febbf88a6796b02c6a92c8c9be7e254..9b39a62c9771c00bd676713be4bb48f3a5cdc443 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~2019 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
@@ -10,8 +10,10 @@
// +----------------------------------------------------------------------
// $Id$
-if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["REQUEST_URI"])) {
+if (is_file($_SERVER["DOCUMENT_ROOT"] . $_SERVER["SCRIPT_NAME"])) {
return false;
} else {
+ $_SERVER["SCRIPT_FILENAME"] = __DIR__ . '/index.php';
+
require __DIR__ . "/index.php";
}
diff --git a/application/command.php b/route/app.php
similarity index 67%
rename from application/command.php
rename to route/app.php
index 826bb2b231d4f7863167c23aee1ab668e51e872f..d8e09e382ddf3b67e3193d5ac5cc6b9226959a68 100644
--- a/application/command.php
+++ b/route/app.php
@@ -2,11 +2,16 @@
// +----------------------------------------------------------------------
// | 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>
+// | Author: liu21st
// +----------------------------------------------------------------------
+use think\facade\Route;
-return [];
+Route::get('think', function () {
+ return 'hello,ThinkPHP6!';
+});
+
+Route::get('hello/:name', 'index/hello');
diff --git a/think b/think
index 8afa938affcc48dc7171fe9ab78d5e32ea25e9c6..2429d223a2e44b29a52a721ae88d4085c0d274f3 100644
--- a/think
+++ b/think
@@ -1,17 +1,10 @@
#!/usr/bin/env php
-// +----------------------------------------------------------------------
+namespace think;
-// 定义项目路径
-define('APP_PATH', __DIR__ . '/application/');
+// 命令行入口文件
+// 加载基础文件
+require __DIR__ . '/vendor/autoload.php';
-// 加载框架引导文件
-require './thinkphp/console.php';
\ No newline at end of file
+// 应用初始化
+(new App())->console->run();
\ No newline at end of file
diff --git a/view/README.md b/view/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..360eb2468af9fd86de756c4cf26e9b90ee63cb26
--- /dev/null
+++ b/view/README.md
@@ -0,0 +1 @@
+如果不使用模板,可以删除该目录
\ No newline at end of file