diff --git a/digital_doctor_admin/thinkphp b/digital_doctor_admin/thinkphp
new file mode 160000
index 0000000..c859e71
--- /dev/null
+++ b/digital_doctor_admin/thinkphp
@@ -0,0 +1 @@
+Subproject commit c859e712f50362d8ee3a7cd2e495af5494847bef
diff --git a/digital_doctor_admin/thinkphp/.gitignore b/digital_doctor_admin/thinkphp/.gitignore
deleted file mode 100644
index 7884c74..0000000
--- a/digital_doctor_admin/thinkphp/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-/composer.lock
-/vendor
-.idea
-.DS_Store
-/.vscode
diff --git a/digital_doctor_admin/thinkphp/.htaccess b/digital_doctor_admin/thinkphp/.htaccess
deleted file mode 100644
index 3418e55..0000000
--- a/digital_doctor_admin/thinkphp/.htaccess
+++ /dev/null
@@ -1 +0,0 @@
-deny from all
\ No newline at end of file
diff --git a/digital_doctor_admin/thinkphp/.travis.yml b/digital_doctor_admin/thinkphp/.travis.yml
deleted file mode 100644
index f74ffca..0000000
--- a/digital_doctor_admin/thinkphp/.travis.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-sudo: false
-
-language: php
-
-services:
- - memcached
- - mongodb
- - mysql
- - postgresql
- - redis-server
-
-matrix:
- fast_finish: true
- include:
- - php: 5.4
- - php: 5.5
- - php: 5.6
- - php: 7.0
- - php: hhvm
- allow_failures:
- - php: hhvm
-
-cache:
- directories:
- - $HOME/.composer/cache
-
-before_install:
- - composer self-update
- - mysql -e "create database IF NOT EXISTS test;" -uroot
- - psql -c 'DROP DATABASE IF EXISTS test;' -U postgres
- - psql -c 'create database test;' -U postgres
-
-install:
- - ./tests/script/install.sh
-
-script:
- ## LINT
- - find . -path ./vendor -prune -o -type f -name \*.php -exec php -l {} \;
- ## PHP Copy/Paste Detector
- - vendor/bin/phpcpd --verbose --exclude vendor ./ || true
- ## PHPLOC
- - vendor/bin/phploc --exclude vendor ./
- ## PHPUNIT
- - vendor/bin/phpunit --coverage-clover=coverage.xml --configuration=phpunit.xml
-
-after_success:
- - bash <(curl -s https://codecov.io/bash)
diff --git a/digital_doctor_admin/thinkphp/CONTRIBUTING.md b/digital_doctor_admin/thinkphp/CONTRIBUTING.md
deleted file mode 100644
index dc8e91c..0000000
--- a/digital_doctor_admin/thinkphp/CONTRIBUTING.md
+++ /dev/null
@@ -1,119 +0,0 @@
-如何贡献我的源代码
-===
-
-此文档介绍了 ThinkPHP 团队的组成以及运转机制,您提交的代码将给 ThinkPHP 项目带来什么好处,以及如何才能加入我们的行列。
-
-## 通过 Github 贡献代码
-
-ThinkPHP 目前使用 Git 来控制程序版本,如果你想为 ThinkPHP 贡献源代码,请先大致了解 Git 的使用方法。我们目前把项目托管在 GitHub 上,任何 GitHub 用户都可以向我们贡献代码。
-
-参与的方式很简单,`fork`一份 ThinkPHP 的代码到你的仓库中,修改后提交,并向我们发起`pull request`申请,我们会及时对代码进行审查并处理你的申请。审查通过后,你的代码将被`merge`进我们的仓库中,这样你就会自动出现在贡献者名单里了,非常方便。
-
-我们希望你贡献的代码符合:
-
-* ThinkPHP 的编码规范
-* 适当的注释,能让其他人读懂
-* 遵循 Apache2 开源协议
-
-**如果想要了解更多细节或有任何疑问,请继续阅读下面的内容**
-
-### 注意事项
-
-* 本项目代码格式化标准选用 [**PSR-2**](http://www.kancloud.cn/thinkphp/php-fig-psr/3141);
-* 类名和类文件名遵循 [**PSR-4**](http://www.kancloud.cn/thinkphp/php-fig-psr/3144);
-* 对于 Issues 的处理,请使用诸如 `fix #xxx(Issue ID)` 的 commit title 直接关闭 issue。
-* 系统会自动在 PHP 5.4 5.5 5.6 7.0 和 HHVM 上测试修改,其中 HHVM 下的测试容许报错,请确保你的修改符合 PHP 5.4 ~ 5.6 和 PHP 7.0 的语法规范;
-* 管理员不会合并造成 CI faild 的修改,若出现 CI faild 请检查自己的源代码或修改相应的[单元测试文件](tests);
-
-## GitHub Issue
-
-GitHub 提供了 Issue 功能,该功能可以用于:
-
-* 提出 bug
-* 提出功能改进
-* 反馈使用体验
-
-该功能不应该用于:
-
- * 提出修改意见(涉及代码署名和修订追溯问题)
- * 不友善的言论
-
-## 快速修改
-
-**GitHub 提供了快速编辑文件的功能**
-
-1. 登录 GitHub 帐号;
-2. 浏览项目文件,找到要进行修改的文件;
-3. 点击右上角铅笔图标进行修改;
-4. 填写 `Commit changes` 相关内容(Title 必填);
-5. 提交修改,等待 CI 验证和管理员合并。
-
-**若您需要一次提交大量修改,请继续阅读下面的内容**
-
-## 完整流程
-
-1. `fork`本项目;
-2. 克隆(`clone`)你 `fork` 的项目到本地;
-3. 新建分支(`branch`)并检出(`checkout`)新分支;
-4. 添加本项目到你的本地 git 仓库作为上游(`upstream`);
-5. 进行修改,若你的修改包含方法或函数的增减,请记得修改[单元测试文件](tests);
-6. 变基(衍合 `rebase`)你的分支到上游 master 分支;
-7. `push` 你的本地仓库到 GitHub;
-8. 提交 `pull request`;
-9. 等待 CI 验证(若不通过则重复 5~7,不需要重新提交 `pull request`,GitHub 会自动更新你的 `pull request`);
-10. 等待管理员处理,并及时 `rebase` 你的分支到上游 master 分支(若上游 master 分支有修改)。
-
-*若有必要,可以 `git push -f` 强行推送 rebase 后的分支到自己的 `fork`*
-
-*绝对不可以使用 `git push -f` 强行推送修改到上游*
-
-### 注意事项
-
-* 若对上述流程有任何不清楚的地方,请查阅 GIT 教程,如 [这个](http://backlogtool.com/git-guide/cn/);
-* 对于代码**不同方面**的修改,请在自己 `fork` 的项目中**创建不同的分支**(原因参见`完整流程`第9条备注部分);
-* 变基及交互式变基操作参见 [Git 交互式变基](http://pakchoi.me/2015/03/17/git-interactive-rebase/)
-
-## 推荐资源
-
-### 开发环境
-
-* XAMPP for Windows 5.5.x
-* WampServer (for Windows)
-* upupw Apache PHP5.4 ( for Windows)
-
-或自行安装
-
-- Apache / Nginx
-- PHP 5.4 ~ 5.6
-- MySQL / MariaDB
-
-*Windows 用户推荐添加 PHP bin 目录到 PATH,方便使用 composer*
-
-*Linux 用户自行配置环境, Mac 用户推荐使用内置 Apache 配合 Homebrew 安装 PHP 和 MariaDB*
-
-### 编辑器
-
-Sublime Text 3 + phpfmt 插件
-
-phpfmt 插件参数
-
-```json
-{
- "autocomplete": true,
- "enable_auto_align": true,
- "format_on_save": true,
- "indent_with_space": true,
- "psr1_naming": false,
- "psr2": true,
- "version": 4
-}
-```
-
-或其他 编辑器 / IDE 配合 PSR2 自动格式化工具
-
-### Git GUI
-
-* SourceTree
-* GitHub Desktop
-
-或其他 Git 图形界面客户端
diff --git a/digital_doctor_admin/thinkphp/LICENSE.txt b/digital_doctor_admin/thinkphp/LICENSE.txt
deleted file mode 100644
index 2cb9a8a..0000000
--- a/digital_doctor_admin/thinkphp/LICENSE.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-
-ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
-版权所有Copyright © 2006-2017 by ThinkPHP (http://thinkphp.cn)
-All rights reserved。
-ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
-
-Apache Licence是著名的非盈利开源组织Apache采用的协议。
-该协议和BSD类似,鼓励代码共享和尊重原作者的著作权,
-允许代码修改,再作为开源或商业软件发布。需要满足
-的条件:
-1. 需要给代码的用户一份Apache Licence ;
-2. 如果你修改了代码,需要在被修改的文件中说明;
-3. 在延伸的代码中(修改和有源代码衍生的代码中)需要
-带有原来代码中的协议,商标,专利声明和其他原来作者规
-定需要包含的说明;
-4. 如果再发布的产品中包含一个Notice文件,则在Notice文
-件中需要带有本协议内容。你可以在Notice中增加自己的
-许可,但不可以表现为对Apache Licence构成更改。
-具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/digital_doctor_admin/thinkphp/README.md b/digital_doctor_admin/thinkphp/README.md
deleted file mode 100644
index 3200d31..0000000
--- a/digital_doctor_admin/thinkphp/README.md
+++ /dev/null
@@ -1,69 +0,0 @@
-# ThinkPHP 5.0(FastAdmin 团队长期维护)
-
-## 维护原因
-
-FastAdmin 致力于服务开发者,为开发者节省时间,为了 FastAdmin 开源项目持续发展下去。
-
-## 参与开源
-
-[贡献代码](https://doc.fastadmin.net/doc/contributing.html)
-
-
-## 使用方法
-
-- 本框架已经应用在 FastAdmin 后台框架中,在 FastAdmin 项目中使用 `composer update topthink/framework -vvv` 命令即可更新。
-
-- 非 FastAdmin 的 ThinkPHP5.0 项目使用此仓库,请修改 `composer.json` 添加以下配置,在执行`composer update topthink/framework -vvv` 命令,具体可以参考 FastAdmin 项目目录下的 `composer.json` 文件内容。
- ```
- "repositories": [
- {
- "type": "git",
- "url": "https://gitee.com/fastadminnet/framework.git"
- }
- ]
- ```
-
-## 环境要求
-
-php 7.1+
-
-
-
-## ThinkPHP 介绍
-
-ThinkPHP5 在保持快速开发和大道至简的核心理念不变的同时,优化核心,减少依赖,基于全新的架构思想和命名空间实现,是 ThinkPHP 突破原有框架思路的颠覆之作,其主要特性包括:
-
- + 基于命名空间和众多PHP新特性
- + 核心功能组件化
- + 强化路由功能
- + 更灵活的控制器
- + 重构的模型和数据库类
- + 配置文件可分离
- + 重写的自动验证和完成
- + 简化扩展机制
- + API支持完善
- + 改进的Log类
- + 命令行访问支持
- + REST支持
- + 引导文件支持
- + 方便的自动生成定义
- + 真正惰性加载
- + 分布式环境支持
- + 支持Composer
- + 支持MongoDb
-
-详细开发文档参考 [ThinkPHP5完全开发手册](http://www.kancloud.cn/manual/thinkphp5) 以及[ThinkPHP5入门系列教程](http://www.kancloud.cn/special/thinkphp5_quickstart)
-
-## 版权信息
-
-ThinkPHP遵循Apache2开源协议发布,并提供免费使用。
-
-本项目包含的第三方源码和二进制文件之版权信息另行标注。
-
-版权所有Copyright © 2006-2024 by ThinkPHP (http://thinkphp.cn)
-
-All rights reserved。
-
-ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。
-
-更多细节参阅 [LICENSE.txt](LICENSE.txt)
diff --git a/digital_doctor_admin/thinkphp/base.php b/digital_doctor_admin/thinkphp/base.php
deleted file mode 100644
index 3b98317..0000000
--- a/digital_doctor_admin/thinkphp/base.php
+++ /dev/null
@@ -1,65 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-define('THINK_VERSION', '5.0.27');
-define('THINK_START_TIME', microtime(true));
-define('THINK_START_MEM', memory_get_usage());
-define('EXT', '.php');
-define('DS', DIRECTORY_SEPARATOR);
-defined('THINK_PATH') or define('THINK_PATH', __DIR__ . DS);
-define('LIB_PATH', THINK_PATH . 'library' . DS);
-define('CORE_PATH', LIB_PATH . 'think' . DS);
-define('TRAIT_PATH', LIB_PATH . 'traits' . DS);
-defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS);
-defined('ROOT_PATH') or define('ROOT_PATH', dirname(realpath(APP_PATH)) . DS);
-defined('EXTEND_PATH') or define('EXTEND_PATH', ROOT_PATH . 'extend' . DS);
-defined('VENDOR_PATH') or define('VENDOR_PATH', ROOT_PATH . 'vendor' . DS);
-defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS);
-defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS);
-defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' . DS);
-defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' . DS);
-defined('CONF_PATH') or define('CONF_PATH', APP_PATH); // 配置文件目录
-defined('CONF_EXT') or define('CONF_EXT', EXT); // 配置文件后缀
-defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 环境变量的配置前缀
-
-// 环境常量
-define('IS_CLI', PHP_SAPI == 'cli' ? true : false);
-define('IS_WIN', strpos(PHP_OS, 'WIN') !== false);
-
-// 载入Loader类
-require CORE_PATH . 'Loader.php';
-
-// 加载环境变量配置文件
-if (is_file(ROOT_PATH . '.env')) {
- $env = parse_ini_file(ROOT_PATH . '.env', true);
-
- foreach ($env as $key => $val) {
- $name = ENV_PREFIX . strtoupper($key);
-
- if (is_array($val)) {
- foreach ($val as $k => $v) {
- $item = $name . '_' . strtoupper($k);
- putenv("$item=$v");
- }
- } else {
- putenv("$name=$val");
- }
- }
-}
-
-// 注册自动加载
-\think\Loader::register();
-
-// 注册错误和异常处理机制
-\think\Error::register();
-
-// 加载惯例配置文件
-\think\Config::set(include THINK_PATH . 'convention' . EXT);
diff --git a/digital_doctor_admin/thinkphp/codecov.yml b/digital_doctor_admin/thinkphp/codecov.yml
deleted file mode 100644
index bef9d64..0000000
--- a/digital_doctor_admin/thinkphp/codecov.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-comment:
- layout: header, changes, diff
-coverage:
- ignore:
- - base.php
- - helper.php
- - convention.php
- - lang/zh-cn.php
- - start.php
- - console.php
- status:
- patch: false
diff --git a/digital_doctor_admin/thinkphp/composer.json b/digital_doctor_admin/thinkphp/composer.json
deleted file mode 100644
index caf6c7e..0000000
--- a/digital_doctor_admin/thinkphp/composer.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "topthink/framework",
- "description": "the new thinkphp framework",
- "type": "think-framework",
- "keywords": [
- "framework",
- "thinkphp",
- "ORM"
- ],
- "homepage": "http://thinkphp.cn/",
- "license": "Apache-2.0",
- "authors": [
- {
- "name": "liu21st",
- "email": "liu21st@gmail.com"
- }
- ],
- "require": {
- "php": ">=7.1.0",
- "topthink/think-installer": "~1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "4.8.*",
- "johnkary/phpunit-speedtrap": "^1.0",
- "mikey179/vfsstream": "~1.6",
- "phploc/phploc": "2.*",
- "sebastian/phpcpd": "2.*",
- "phpdocumentor/reflection-docblock": "^2.0"
- },
- "autoload": {
- "psr-4": {
- "think\\": "library/think"
- }
- }
-}
diff --git a/digital_doctor_admin/thinkphp/console.php b/digital_doctor_admin/thinkphp/console.php
deleted file mode 100644
index 578e4a7..0000000
--- a/digital_doctor_admin/thinkphp/console.php
+++ /dev/null
@@ -1,20 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-// ThinkPHP 引导文件
-// 加载基础文件
-require __DIR__ . '/base.php';
-
-// 执行应用
-App::initCommon();
-Console::init();
diff --git a/digital_doctor_admin/thinkphp/convention.php b/digital_doctor_admin/thinkphp/convention.php
deleted file mode 100644
index 31a0a0c..0000000
--- a/digital_doctor_admin/thinkphp/convention.php
+++ /dev/null
@@ -1,298 +0,0 @@
- '',
- // 应用调试模式
- 'app_debug' => false,
- // 应用Trace
- 'app_trace' => false,
- // 应用模式状态
- 'app_status' => '',
- // 是否支持多模块
- 'app_multi_module' => true,
- // 入口自动绑定模块
- 'auto_bind_module' => false,
- // 注册的根命名空间
- 'root_namespace' => [],
- // 扩展函数文件
- 'extra_file_list' => [THINK_PATH . 'helper' . EXT],
- // 默认输出类型
- 'default_return_type' => 'html',
- // 默认AJAX 数据返回格式,可选json xml ...
- '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',
- // 操作方法前缀
- 'use_action_prefix' => false,
- // 操作方法后缀
- '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' => '/',
- // HTTPS代理标识
- 'https_agent_name' => '',
- // URL伪静态后缀
- 'url_html_suffix' => 'html',
- // URL普通方式参数 用于自动生成
- 'url_common_param' => false,
- // URL参数方式 0 按名称成对解析 1 按顺序解析
- 'url_param_type' => 0,
- // 是否开启路由
- 'url_route_on' => true,
- // 路由配置文件(支持配置多个)
- 'route_config_file' => ['route'],
- // 路由使用完整匹配
- 'route_complete_match' => false,
- // 是否强制使用路由
- '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,
- // 全局请求缓存排除规则
- 'request_cache_except' => [],
-
- // +----------------------------------------------------------------------
- // | 模板设置
- // +----------------------------------------------------------------------
-
- 'template' => [
- // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写
- 'auto_rule' => 1,
- // 模板引擎类型 支持 php think 支持扩展
- 'type' => 'Think',
- // 视图基础目录,配置目录为所有模块的视图起始目录
- 'view_base' => '',
- // 当前模板的视图目录 留空为自动获取
- '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' => '',
- // 是否记录trace信息到日志
- 'record_trace' => false,
-
- // +----------------------------------------------------------------------
- // | 日志设置
- // +----------------------------------------------------------------------
-
- '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,
- 'httponly' => true,
- 'secure' => false,
- ],
-
- // +----------------------------------------------------------------------
- // | Cookie设置
- // +----------------------------------------------------------------------
- 'cookie' => [
- // cookie 名称前缀
- 'prefix' => '',
- // cookie 保存时间
- 'expire' => 0,
- // cookie 保存路径
- 'path' => '/',
- // cookie 有效域名
- 'domain' => '',
- // cookie 启用安全传输
- 'secure' => false,
- // httponly设置
- 'httponly' => '',
- // 是否使用 setcookie
- 'setcookie' => true,
- ],
-
- // +----------------------------------------------------------------------
- // | 数据库设置
- // +----------------------------------------------------------------------
-
- 'database' => [
- // 数据库类型
- 'type' => 'mysql',
- // 数据库连接DSN配置
- 'dsn' => '',
- // 服务器地址
- 'hostname' => '127.0.0.1',
- // 数据库名
- 'database' => '',
- // 数据库用户名
- 'username' => 'root',
- // 数据库密码
- 'password' => '',
- // 数据库连接端口
- 'hostport' => '',
- // 数据库连接参数
- 'params' => [],
- // 数据库编码默认采用utf8
- 'charset' => 'utf8',
- // 数据库表前缀
- 'prefix' => '',
- // 数据库调试模式
- 'debug' => false,
- // 数据库部署方式: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,
- ],
-
- //分页配置
- 'paginate' => [
- 'type' => 'bootstrap',
- 'var_page' => 'page',
- 'list_rows' => 15,
- ],
-
- //控制台配置
- 'console' => [
- 'name' => 'Think Console',
- 'version' => '0.1',
- 'user' => null,
- ],
-
-];
diff --git a/digital_doctor_admin/thinkphp/helper.php b/digital_doctor_admin/thinkphp/helper.php
deleted file mode 100644
index 12683cf..0000000
--- a/digital_doctor_admin/thinkphp/helper.php
+++ /dev/null
@@ -1,589 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-//------------------------
-// ThinkPHP 助手函数
-//-------------------------
-
-use think\Cache;
-use think\Config;
-use think\Cookie;
-use think\Db;
-use think\Debug;
-use think\exception\HttpException;
-use think\exception\HttpResponseException;
-use think\Lang;
-use think\Loader;
-use think\Log;
-use think\Model;
-use think\Request;
-use think\Response;
-use think\Session;
-use think\Url;
-use think\View;
-
-if (!function_exists('load_trait')) {
- /**
- * 快速导入Traits PHP5.5以上无需调用
- * @param string $class trait库
- * @param string $ext 类库后缀
- * @return boolean
- */
- function load_trait($class, $ext = EXT)
- {
- return Loader::import($class, TRAIT_PATH, $ext);
- }
-}
-
-if (!function_exists('exception')) {
- /**
- * 抛出异常处理
- *
- * @param string $msg 异常消息
- * @param integer $code 异常代码 默认为0
- * @param string $exception 异常类
- *
- * @throws Exception
- */
- function exception($msg, $code = 0, $exception = '')
- {
- $e = $exception ?: '\think\Exception';
- throw new $e($msg, $code);
- }
-}
-
-if (!function_exists('debug')) {
- /**
- * 记录时间(微秒)和内存使用情况
- * @param string $start 开始标签
- * @param string $end 结束标签
- * @param integer|string $dec 小数位 如果是m 表示统计内存占用
- * @return mixed
- */
- function debug($start, $end = '', $dec = 6)
- {
- if ('' == $end) {
- Debug::remark($start);
- } else {
- return 'm' == $dec ? Debug::getRangeMem($start, $end) : Debug::getRangeTime($start, $end, $dec);
- }
- }
-}
-
-if (!function_exists('lang')) {
- /**
- * 获取语言变量值
- * @param string $name 语言变量名
- * @param array $vars 动态变量值
- * @param string $lang 语言
- * @return mixed
- */
- function lang($name, $vars = [], $lang = '')
- {
- return Lang::get($name, $vars, $lang);
- }
-}
-
-if (!function_exists('config')) {
- /**
- * 获取和设置配置参数
- * @param string|array $name 参数名
- * @param mixed $value 参数值
- * @param string $range 作用域
- * @return mixed
- */
- function config($name = '', $value = null, $range = '')
- {
- if (is_null($value) && is_string($name)) {
- return 0 === strpos($name, '?') ? Config::has(substr($name, 1), $range) : Config::get($name, $range);
- } else {
- return Config::set($name, $value, $range);
- }
- }
-}
-
-if (!function_exists('input')) {
- /**
- * 获取输入数据 支持默认值和过滤
- * @param string $key 获取的变量名
- * @param mixed $default 默认值
- * @param string $filter 过滤方法
- * @return mixed
- */
- function input($key = '', $default = null, $filter = '')
- {
- if (0 === strpos($key, '?')) {
- $key = substr($key, 1);
- $has = true;
- }
- if ($pos = strpos($key, '.')) {
- // 指定参数来源
- list($method, $key) = explode('.', $key, 2);
- if (!in_array($method, ['get', 'post', 'put', 'patch', 'delete', 'route', 'param', 'request', 'session', 'cookie', 'server', 'env', 'path', 'file'])) {
- $key = $method . '.' . $key;
- $method = 'param';
- }
- } else {
- // 默认为自动判断
- $method = 'param';
- }
- if (isset($has)) {
- return request()->has($key, $method, $default);
- } else {
- return request()->$method($key, $default, $filter);
- }
- }
-}
-
-if (!function_exists('widget')) {
- /**
- * 渲染输出Widget
- * @param string $name Widget名称
- * @param array $data 传入的参数
- * @return mixed
- */
- function widget($name, $data = [])
- {
- return Loader::action($name, $data, 'widget');
- }
-}
-
-if (!function_exists('model')) {
- /**
- * 实例化Model
- * @param string $name Model名称
- * @param string $layer 业务层名称
- * @param bool $appendSuffix 是否添加类名后缀
- * @return \think\Model
- */
- function model($name = '', $layer = 'model', $appendSuffix = false)
- {
- return Loader::model($name, $layer, $appendSuffix);
- }
-}
-
-if (!function_exists('validate')) {
- /**
- * 实例化验证器
- * @param string $name 验证器名称
- * @param string $layer 业务层名称
- * @param bool $appendSuffix 是否添加类名后缀
- * @return \think\Validate
- */
- function validate($name = '', $layer = 'validate', $appendSuffix = false)
- {
- return Loader::validate($name, $layer, $appendSuffix);
- }
-}
-
-if (!function_exists('db')) {
- /**
- * 实例化数据库类
- * @param string $name 操作的数据表名称(不含前缀)
- * @param array|string $config 数据库配置参数
- * @param bool $force 是否强制重新连接
- * @return \think\db\Query
- */
- function db($name = '', $config = [], $force = false)
- {
- return Db::connect($config, $force)->name($name);
- }
-}
-
-if (!function_exists('controller')) {
- /**
- * 实例化控制器 格式:[模块/]控制器
- * @param string $name 资源地址
- * @param string $layer 控制层名称
- * @param bool $appendSuffix 是否添加类名后缀
- * @return \think\Controller
- */
- function controller($name, $layer = 'controller', $appendSuffix = false)
- {
- return Loader::controller($name, $layer, $appendSuffix);
- }
-}
-
-if (!function_exists('action')) {
- /**
- * 调用模块的操作方法 参数格式 [模块/控制器/]操作
- * @param string $url 调用地址
- * @param string|array $vars 调用参数 支持字符串和数组
- * @param string $layer 要调用的控制层名称
- * @param bool $appendSuffix 是否添加类名后缀
- * @return mixed
- */
- function action($url, $vars = [], $layer = 'controller', $appendSuffix = false)
- {
- return Loader::action($url, $vars, $layer, $appendSuffix);
- }
-}
-
-if (!function_exists('import')) {
- /**
- * 导入所需的类库 同java的Import 本函数有缓存功能
- * @param string $class 类库命名空间字符串
- * @param string $baseUrl 起始路径
- * @param string $ext 导入的文件扩展名
- * @return boolean
- */
- function import($class, $baseUrl = '', $ext = EXT)
- {
- return Loader::import($class, $baseUrl, $ext);
- }
-}
-
-if (!function_exists('vendor')) {
- /**
- * 快速导入第三方框架类库 所有第三方框架的类库文件统一放到 系统的Vendor目录下面
- * @param string $class 类库
- * @param string $ext 类库后缀
- * @return boolean
- */
- function vendor($class, $ext = EXT)
- {
- return Loader::import($class, VENDOR_PATH, $ext);
- }
-}
-
-if (!function_exists('dump')) {
- /**
- * 浏览器友好的变量输出
- * @param mixed $var 变量
- * @param boolean $echo 是否输出 默认为true 如果为false 则返回输出字符串
- * @param string $label 标签 默认为空
- * @return void|string
- */
- function dump($var, $echo = true, $label = null)
- {
- return Debug::dump($var, $echo, $label);
- }
-}
-
-if (!function_exists('url')) {
- /**
- * Url生成
- * @param string $url 路由地址
- * @param string|array $vars 变量
- * @param bool|string $suffix 生成的URL后缀
- * @param bool|string $domain 域名
- * @return string
- */
- function url($url = '', $vars = '', $suffix = true, $domain = false)
- {
- return Url::build($url, $vars, $suffix, $domain);
- }
-}
-
-if (!function_exists('session')) {
- /**
- * Session管理
- * @param string|array $name session名称,如果为数组表示进行session设置
- * @param mixed $value session值
- * @param string $prefix 前缀
- * @return mixed
- */
- function session($name, $value = '', $prefix = null)
- {
- if (is_array($name)) {
- // 初始化
- Session::init($name);
- } elseif (is_null($name)) {
- // 清除
- Session::clear('' === $value ? null : $value);
- } elseif ('' === $value) {
- // 判断或获取
- return 0 === strpos($name, '?') ? Session::has(substr($name, 1), $prefix) : Session::get($name, $prefix);
- } elseif (is_null($value)) {
- // 删除
- return Session::delete($name, $prefix);
- } else {
- // 设置
- return Session::set($name, $value, $prefix);
- }
- }
-}
-
-if (!function_exists('cookie')) {
- /**
- * Cookie管理
- * @param string|array $name cookie名称,如果为数组表示进行cookie设置
- * @param mixed $value cookie值
- * @param mixed $option 参数
- * @return mixed
- */
- function cookie($name, $value = '', $option = null)
- {
- if (is_array($name)) {
- // 初始化
- Cookie::init($name);
- } elseif (is_null($name)) {
- // 清除
- Cookie::clear($value);
- } elseif ('' === $value) {
- // 获取
- return 0 === strpos($name, '?') ? Cookie::has(substr($name, 1), $option) : Cookie::get($name, $option);
- } elseif (is_null($value)) {
- // 删除
- return Cookie::delete($name);
- } else {
- // 设置
- return Cookie::set($name, $value, $option);
- }
- }
-}
-
-if (!function_exists('cache')) {
- /**
- * 缓存管理
- * @param mixed $name 缓存名称,如果为数组表示进行缓存设置
- * @param mixed $value 缓存值
- * @param mixed $options 缓存参数
- * @param string $tag 缓存标签
- * @return mixed
- */
- function cache($name, $value = '', $options = null, $tag = null)
- {
- if (is_array($options)) {
- // 缓存操作的同时初始化
- $cache = Cache::connect($options);
- } elseif (is_array($name)) {
- // 缓存初始化
- return Cache::connect($name);
- } else {
- $cache = Cache::init();
- }
-
- if (is_null($name)) {
- return $cache->clear($value);
- } elseif ('' === $value) {
- // 获取缓存
- return 0 === strpos($name, '?') ? $cache->has(substr($name, 1)) : $cache->get($name);
- } elseif (is_null($value)) {
- // 删除缓存
- return $cache->rm($name);
- } elseif (0 === strpos($name, '?') && '' !== $value) {
- $expire = is_numeric($options) ? $options : null;
- return $cache->remember(substr($name, 1), $value, $expire);
- } else {
- // 缓存数据
- if (is_array($options)) {
- $expire = isset($options['expire']) ? $options['expire'] : null; //修复查询缓存无法设置过期时间
- } else {
- $expire = is_numeric($options) ? $options : null; //默认快捷缓存设置过期时间
- }
- if (is_null($tag)) {
- return $cache->set($name, $value, $expire);
- } else {
- return $cache->tag($tag)->set($name, $value, $expire);
- }
- }
- }
-}
-
-if (!function_exists('trace')) {
- /**
- * 记录日志信息
- * @param mixed $log log信息 支持字符串和数组
- * @param string $level 日志级别
- * @return void|array
- */
- function trace($log = '[think]', $level = 'log')
- {
- if ('[think]' === $log) {
- return Log::getLog();
- } else {
- Log::record($log, $level);
- }
- }
-}
-
-if (!function_exists('request')) {
- /**
- * 获取当前Request对象实例
- * @return Request
- */
- function request()
- {
- return Request::instance();
- }
-}
-
-if (!function_exists('response')) {
- /**
- * 创建普通 Response 对象实例
- * @param mixed $data 输出数据
- * @param int|string $code 状态码
- * @param array $header 头信息
- * @param string $type
- * @return Response
- */
- function response($data = [], $code = 200, $header = [], $type = 'html')
- {
- return Response::create($data, $type, $code, $header);
- }
-}
-
-if (!function_exists('view')) {
- /**
- * 渲染模板输出
- * @param string $template 模板文件
- * @param array $vars 模板变量
- * @param array $replace 模板替换
- * @param integer $code 状态码
- * @return \think\response\View
- */
- function view($template = '', $vars = [], $replace = [], $code = 200)
- {
- return Response::create($template, 'view', $code)->replace($replace)->assign($vars);
- }
-}
-
-if (!function_exists('json')) {
- /**
- * 获取\think\response\Json对象实例
- * @param mixed $data 返回的数据
- * @param integer $code 状态码
- * @param array $header 头部
- * @param array $options 参数
- * @return \think\response\Json
- */
- function json($data = [], $code = 200, $header = [], $options = [])
- {
- return Response::create($data, 'json', $code, $header, $options);
- }
-}
-
-if (!function_exists('jsonp')) {
- /**
- * 获取\think\response\Jsonp对象实例
- * @param mixed $data 返回的数据
- * @param integer $code 状态码
- * @param array $header 头部
- * @param array $options 参数
- * @return \think\response\Jsonp
- */
- function jsonp($data = [], $code = 200, $header = [], $options = [])
- {
- return Response::create($data, 'jsonp', $code, $header, $options);
- }
-}
-
-if (!function_exists('xml')) {
- /**
- * 获取\think\response\Xml对象实例
- * @param mixed $data 返回的数据
- * @param integer $code 状态码
- * @param array $header 头部
- * @param array $options 参数
- * @return \think\response\Xml
- */
- function xml($data = [], $code = 200, $header = [], $options = [])
- {
- return Response::create($data, 'xml', $code, $header, $options);
- }
-}
-
-if (!function_exists('redirect')) {
- /**
- * 获取\think\response\Redirect对象实例
- * @param mixed $url 重定向地址 支持Url::build方法的地址
- * @param array|integer $params 额外参数
- * @param integer $code 状态码
- * @param array $with 隐式传参
- * @return \think\response\Redirect
- */
- function redirect($url = [], $params = [], $code = 302, $with = [])
- {
- if (is_integer($params)) {
- $code = $params;
- $params = [];
- }
- return Response::create($url, 'redirect', $code)->params($params)->with($with);
- }
-}
-
-if (!function_exists('abort')) {
- /**
- * 抛出HTTP异常
- * @param integer|Response $code 状态码 或者 Response对象实例
- * @param string $message 错误信息
- * @param array $header 参数
- */
- function abort($code, $message = null, $header = [])
- {
- if ($code instanceof Response) {
- throw new HttpResponseException($code);
- } else {
- throw new HttpException($code, $message, null, $header);
- }
- }
-}
-
-if (!function_exists('halt')) {
- /**
- * 调试变量并且中断输出
- * @param mixed $var 调试变量或者信息
- */
- function halt($var)
- {
- dump($var);
- throw new HttpResponseException(new Response);
- }
-}
-
-if (!function_exists('token')) {
- /**
- * 生成表单令牌
- * @param string $name 令牌名称
- * @param mixed $type 令牌生成方法
- * @return string
- */
- function token($name = '__token__', $type = 'md5')
- {
- $token = Request::instance()->token($name, $type);
- return '';
- }
-}
-
-if (!function_exists('load_relation')) {
- /**
- * 延迟预载入关联查询
- * @param mixed $resultSet 数据集
- * @param mixed $relation 关联
- * @return array
- */
- function load_relation($resultSet, $relation)
- {
- $item = current($resultSet);
- if ($item instanceof Model) {
- $item->eagerlyResultSet($resultSet, $relation);
- }
- return $resultSet;
- }
-}
-
-if (!function_exists('collection')) {
- /**
- * 数组转换为数据集对象
- * @param array $resultSet 数据集数组
- * @return \think\model\Collection|\think\Collection
- */
- function collection($resultSet)
- {
- $item = current($resultSet);
- if ($item instanceof Model) {
- return \think\model\Collection::make($resultSet);
- } else {
- return \think\Collection::make($resultSet);
- }
- }
-}
diff --git a/digital_doctor_admin/thinkphp/lang/zh-cn.php b/digital_doctor_admin/thinkphp/lang/zh-cn.php
deleted file mode 100644
index eb7a914..0000000
--- a/digital_doctor_admin/thinkphp/lang/zh-cn.php
+++ /dev/null
@@ -1,136 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-// 核心中文语言包
-return [
- // 系统错误提示
- 'Undefined variable' => '未定义变量',
- 'Undefined index' => '未定义数组索引',
- 'Undefined offset' => '未定义数组下标',
- 'Parse error' => '语法解析错误',
- 'Type error' => '类型错误',
- 'Fatal error' => '致命错误',
- 'syntax error' => '语法错误',
-
- // 框架核心错误提示
- 'dispatch type not support' => '不支持的调度类型',
- 'method param miss' => '方法参数错误',
- 'method not exists' => '方法不存在',
- 'module not exists' => '模块不存在',
- 'controller not exists' => '控制器不存在',
- 'class not exists' => '类不存在',
- 'property not exists' => '类的属性不存在',
- 'template not exists' => '模板文件不存在',
- 'illegal controller name' => '非法的控制器名称',
- 'illegal action name' => '非法的操作名称',
- 'url suffix deny' => '禁止的URL后缀访问',
- 'Route Not Found' => '当前访问路由未定义',
- 'Undefined db type' => '未定义数据库类型',
- 'variable type error' => '变量类型错误',
- 'PSR-4 error' => 'PSR-4 规范错误',
- 'not support total' => '简洁模式下不能获取数据总数',
- 'not support last' => '简洁模式下不能获取最后一页',
- 'error session handler' => '错误的SESSION处理器类',
- 'not allow php tag' => '模板不允许使用PHP语法',
- 'not support' => '不支持',
- 'redisd master' => 'Redisd 主服务器错误',
- 'redisd slave' => 'Redisd 从服务器错误',
- 'must run at sae' => '必须在SAE运行',
- 'memcache init error' => '未开通Memcache服务,请在SAE管理平台初始化Memcache服务',
- 'KVDB init error' => '没有初始化KVDB,请在SAE管理平台初始化KVDB服务',
- 'fields not exists' => '数据表字段不存在',
- 'where express error' => '查询表达式错误',
- 'not support data' => '不支持的数据表达式',
- 'no data to update' => '没有任何数据需要更新',
- 'miss data to insert' => '缺少需要写入的数据',
- 'miss complex primary data' => '缺少复合主键数据',
- 'miss update condition' => '缺少更新条件',
- 'model data Not Found' => '模型数据不存在',
- 'table data not Found' => '表数据不存在',
- 'delete without condition' => '没有条件不会执行删除操作',
- 'miss relation data' => '缺少关联表数据',
- 'tag attr must' => '模板标签属性必须',
- 'tag error' => '模板标签错误',
- 'cache write error' => '缓存写入失败',
- 'sae mc write error' => 'SAE mc 写入错误',
- 'route name not exists' => '路由标识不存在(或参数不够)',
- 'invalid request' => '非法请求',
- 'bind attr has exists' => '模型的属性已经存在',
- 'relation data not exists' => '关联数据不存在',
- 'relation not support' => '关联不支持',
- 'chunk not support order' => 'Chunk不支持调用order方法',
- 'closure not support cache(true)' => '使用闭包查询不支持cache(true),请指定缓存Key',
-
- // 上传错误信息
- 'unknown upload error' => '未知上传错误!',
- 'file write error' => '文件写入失败!',
- 'upload temp dir not found' => '找不到临时文件夹!',
- 'no file to uploaded' => '没有文件被上传!',
- 'only the portion of file is uploaded' => '文件只有部分被上传!',
- 'upload File size exceeds the maximum value' => '上传文件大小超过了最大值!',
- 'upload write error' => '文件上传保存错误!',
- 'has the same filename: {:filename}' => '存在同名文件:{:filename}',
- 'upload illegal files' => '非法上传文件',
- 'illegal image files' => '非法图片文件',
- 'extensions to upload is not allowed' => '上传文件后缀不允许',
- 'mimetype to upload is not allowed' => '上传文件MIME类型不允许!',
- 'filesize not match' => '上传文件大小不符!',
- 'directory {:path} creation failed' => '目录 {:path} 创建失败!',
-
- // Validate Error Message
- ':attribute require' => ':attribute不能为空',
- ':attribute must be numeric' => ':attribute必须是数字',
- ':attribute must be integer' => ':attribute必须是整数',
- ':attribute must be float' => ':attribute必须是浮点数',
- ':attribute must be bool' => ':attribute必须是布尔值',
- ':attribute not a valid email address' => ':attribute格式不符',
- ':attribute not a valid mobile' => ':attribute格式不符',
- ':attribute must be a array' => ':attribute必须是数组',
- ':attribute must be yes,on or 1' => ':attribute必须是yes、on或者1',
- ':attribute not a valid datetime' => ':attribute不是一个有效的日期或时间格式',
- ':attribute not a valid file' => ':attribute不是有效的上传文件',
- ':attribute not a valid image' => ':attribute不是有效的图像文件',
- ':attribute must be alpha' => ':attribute只能是字母',
- ':attribute must be alpha-numeric' => ':attribute只能是字母和数字',
- ':attribute must be alpha-numeric, dash, underscore' => ':attribute只能是字母、数字和下划线_及破折号-',
- ':attribute not a valid domain or ip' => ':attribute不是有效的域名或者IP',
- ':attribute must be chinese' => ':attribute只能是汉字',
- ':attribute must be chinese or alpha' => ':attribute只能是汉字、字母',
- ':attribute must be chinese,alpha-numeric' => ':attribute只能是汉字、字母和数字',
- ':attribute must be chinese,alpha-numeric,underscore, dash' => ':attribute只能是汉字、字母、数字和下划线_及破折号-',
- ':attribute not a valid url' => ':attribute不是有效的URL地址',
- ':attribute not a valid ip' => ':attribute不是有效的IP地址',
- ':attribute must be dateFormat of :rule' => ':attribute必须使用日期格式 :rule',
- ':attribute must be in :rule' => ':attribute必须在 :rule 范围内',
- ':attribute be notin :rule' => ':attribute不能在 :rule 范围内',
- ':attribute must between :1 - :2' => ':attribute只能在 :1 - :2 之间',
- ':attribute not between :1 - :2' => ':attribute不能在 :1 - :2 之间',
- 'size of :attribute must be :rule' => ':attribute长度不符合要求 :rule',
- 'max size of :attribute must be :rule' => ':attribute长度不能超过 :rule',
- 'min size of :attribute must be :rule' => ':attribute长度不能小于 :rule',
- ':attribute cannot be less than :rule' => ':attribute日期不能小于 :rule',
- ':attribute cannot exceed :rule' => ':attribute日期不能超过 :rule',
- ':attribute not within :rule' => '不在有效期内 :rule',
- 'access IP is not allowed' => '不允许的IP访问',
- 'access IP denied' => '禁止的IP访问',
- ':attribute out of accord with :2' => ':attribute和确认字段:2不一致',
- ':attribute cannot be same with :2' => ':attribute和比较字段:2不能相同',
- ':attribute must greater than or equal :rule' => ':attribute必须大于等于 :rule',
- ':attribute must greater than :rule' => ':attribute必须大于 :rule',
- ':attribute must less than or equal :rule' => ':attribute必须小于等于 :rule',
- ':attribute must less than :rule' => ':attribute必须小于 :rule',
- ':attribute must equal :rule' => ':attribute必须等于 :rule',
- ':attribute has exists' => ':attribute已存在',
- ':attribute not conform to the rules' => ':attribute不符合指定规则',
- 'invalid Request method' => '无效的请求类型',
- 'invalid token' => '令牌数据无效',
- 'not conform to the rules' => '规则错误',
-];
diff --git a/digital_doctor_admin/thinkphp/library/think/App.php b/digital_doctor_admin/thinkphp/library/think/App.php
deleted file mode 100644
index a1b1f28..0000000
--- a/digital_doctor_admin/thinkphp/library/think/App.php
+++ /dev/null
@@ -1,677 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-use think\exception\ClassNotFoundException;
-use think\exception\HttpException;
-use think\exception\HttpResponseException;
-use think\exception\RouteNotFoundException;
-
-/**
- * App 应用管理
- * @author liu21st
- */
-class App
-{
- /**
- * @var bool 是否初始化过
- */
- protected static $init = false;
-
- /**
- * @var string 当前模块路径
- */
- public static $modulePath;
-
- /**
- * @var bool 应用调试模式
- */
- public static $debug = true;
-
- /**
- * @var string 应用类库命名空间
- */
- public static $namespace = 'app';
-
- /**
- * @var bool 应用类库后缀
- */
- public static $suffix = false;
-
- /**
- * @var bool 应用路由检测
- */
- protected static $routeCheck;
-
- /**
- * @var bool 严格路由检测
- */
- protected static $routeMust;
-
- /**
- * @var array 请求调度分发
- */
- protected static $dispatch;
-
- /**
- * @var array 额外加载文件
- */
- protected static $file = [];
-
- /**
- * 执行应用程序
- * @access public
- * @param Request $request 请求对象
- * @return Response
- * @throws Exception
- */
- public static function run(Request $request = null)
- {
- $request = is_null($request) ? Request::instance() : $request;
-
- try {
- $config = self::initCommon();
-
- // 模块/控制器绑定
- if (defined('BIND_MODULE')) {
- BIND_MODULE && Route::bind(BIND_MODULE);
- } elseif ($config['auto_bind_module']) {
- // 入口自动绑定
- $name = pathinfo($request->baseFile(), PATHINFO_FILENAME);
- if ($name && 'index' != $name && is_dir(APP_PATH . $name)) {
- Route::bind($name);
- }
- }
-
- $request->filter($config['default_filter']);
-
- // 默认语言
- Lang::range($config['default_lang']);
- // 开启多语言机制 检测当前语言
- $config['lang_switch_on'] && Lang::detect();
- $request->langset(Lang::range());
-
- // 加载系统语言包
- Lang::load([
- THINK_PATH . 'lang' . DS . $request->langset() . EXT,
- APP_PATH . 'lang' . DS . $request->langset() . EXT,
- ]);
-
- // 监听 app_dispatch
- Hook::listen('app_dispatch', self::$dispatch);
- // 获取应用调度信息
- $dispatch = self::$dispatch;
-
- // 未设置调度信息则进行 URL 路由检测
- if (empty($dispatch)) {
- $dispatch = self::routeCheck($request, $config);
- }
-
- // 记录当前调度信息
- $request->dispatch($dispatch);
-
- // 记录路由和请求信息
- if (self::$debug) {
- Log::record('[ ROUTE ] ' . var_export($dispatch, true), 'info');
- Log::record('[ HEADER ] ' . var_export($request->header(), true), 'info');
- Log::record('[ PARAM ] ' . var_export($request->param(), true), 'info');
- }
-
- // 监听 app_begin
- Hook::listen('app_begin', $dispatch);
-
- // 请求缓存检查
- $request->cache(
- $config['request_cache'],
- $config['request_cache_expire'],
- $config['request_cache_except']
- );
-
- $data = self::exec($dispatch, $config);
- } catch (HttpResponseException $exception) {
- $data = $exception->getResponse();
- }
-
- // 清空类的实例化
- Loader::clearInstance();
-
- // 输出数据到客户端
- if ($data instanceof Response) {
- $response = $data;
- } elseif (!is_null($data)) {
- // 默认自动识别响应输出类型
- $type = $request->isAjax() ?
- Config::get('default_ajax_return') :
- Config::get('default_return_type');
-
- $response = Response::create($data, $type);
- } else {
- $response = Response::create();
- }
-
- // 监听 app_end
- Hook::listen('app_end', $response);
-
- return $response;
- }
-
- /**
- * 初始化应用,并返回配置信息
- * @access public
- * @return array
- */
- public static function initCommon()
- {
- if (empty(self::$init)) {
- if (defined('APP_NAMESPACE')) {
- self::$namespace = APP_NAMESPACE;
- }
-
- Loader::addNamespace(self::$namespace, APP_PATH);
-
- // 初始化应用
- $config = self::init();
- self::$suffix = $config['class_suffix'];
-
- // 应用调试模式
- self::$debug = Env::get('app_debug', Config::get('app_debug'));
-
- if (!self::$debug) {
- ini_set('display_errors', 'Off');
- } elseif (!IS_CLI) {
- // 重新申请一块比较大的 buffer
- if (ob_get_level() > 0) {
- $output = ob_get_clean();
- }
-
- ob_start();
-
- if (!empty($output)) {
- echo $output;
- }
-
- }
-
- if (!empty($config['root_namespace'])) {
- Loader::addNamespace($config['root_namespace']);
- }
-
- // 加载额外文件
- if (!empty($config['extra_file_list'])) {
- foreach ($config['extra_file_list'] as $file) {
- $file = strpos($file, '.') ? $file : APP_PATH . $file . EXT;
- if (is_file($file) && !isset(self::$file[$file])) {
- include $file;
- self::$file[$file] = true;
- }
- }
- }
-
- // 设置系统时区
- date_default_timezone_set($config['default_timezone']);
-
- // 监听 app_init
- Hook::listen('app_init');
-
- self::$init = true;
- }
-
- return Config::get();
- }
-
- /**
- * 初始化应用或模块
- * @access public
- * @param string $module 模块名
- * @return array
- */
- private static function init($module = '')
- {
- // 定位模块目录
- $module = $module ? $module . DS : '';
-
- // 加载初始化文件
- if (is_file(APP_PATH . $module . 'init' . EXT)) {
- include APP_PATH . $module . 'init' . EXT;
- } elseif (is_file(RUNTIME_PATH . $module . 'init' . EXT)) {
- include RUNTIME_PATH . $module . 'init' . EXT;
- } else {
- // 加载模块配置
- $config = Config::load(CONF_PATH . $module . 'config' . CONF_EXT);
-
- // 读取数据库配置文件
- $filename = CONF_PATH . $module . 'database' . CONF_EXT;
- Config::load($filename, 'database');
-
- // 读取扩展配置文件
- if (is_dir(CONF_PATH . $module . 'extra')) {
- $dir = CONF_PATH . $module . 'extra';
- $files = scandir($dir);
- foreach ($files as $file) {
- if ('.' . pathinfo($file, PATHINFO_EXTENSION) === CONF_EXT) {
- $filename = $dir . DS . $file;
- Config::load($filename, pathinfo($file, PATHINFO_FILENAME));
- }
- }
- }
-
- // 加载应用状态配置
- if ($config['app_status']) {
- Config::load(CONF_PATH . $module . $config['app_status'] . CONF_EXT);
- }
-
- // 加载行为扩展文件
- if (is_file(CONF_PATH . $module . 'tags' . EXT)) {
- Hook::import(include CONF_PATH . $module . 'tags' . EXT);
- }
-
- // 加载公共文件
- $path = APP_PATH . $module;
- if (is_file($path . 'common' . EXT)) {
- include $path . 'common' . EXT;
- }
-
- // 加载当前模块语言包
- if ($module) {
- Lang::load($path . 'lang' . DS . Request::instance()->langset() . EXT);
- }
- }
-
- return Config::get();
- }
-
- /**
- * 设置当前请求的调度信息
- * @access public
- * @param array|string $dispatch 调度信息
- * @param string $type 调度类型
- * @return void
- */
- public static function dispatch($dispatch, $type = 'module')
- {
- self::$dispatch = ['type' => $type, $type => $dispatch];
- }
-
- /**
- * 执行函数或者闭包方法 支持参数调用
- * @access public
- * @param string|array|\Closure $function 函数或者闭包
- * @param array $vars 变量
- * @return mixed
- */
- public static function invokeFunction($function, $vars = [])
- {
- $reflect = new \ReflectionFunction($function);
- $args = self::bindParams($reflect, $vars);
-
- // 记录执行信息
- self::$debug && Log::record('[ RUN ] ' . $reflect->__toString(), 'info');
-
- return $reflect->invokeArgs($args);
- }
-
- /**
- * 调用反射执行类的方法 支持参数绑定
- * @access public
- * @param string|array $method 方法
- * @param array $vars 变量
- * @return mixed
- */
- public static function invokeMethod($method, $vars = [])
- {
- if (is_array($method)) {
- $class = is_object($method[0]) ? $method[0] : self::invokeClass($method[0]);
- $reflect = new \ReflectionMethod($class, $method[1]);
- } else {
- // 静态方法
- $reflect = new \ReflectionMethod($method);
- }
-
- $args = self::bindParams($reflect, $vars);
-
- self::$debug && Log::record('[ RUN ] ' . $reflect->class . '->' . $reflect->name . '[ ' . $reflect->getFileName() . ' ]', 'info');
-
- return $reflect->invokeArgs(isset($class) ? $class : null, $args);
- }
-
- /**
- * 调用反射执行类的实例化 支持依赖注入
- * @access public
- * @param string $class 类名
- * @param array $vars 变量
- * @return mixed
- */
- public static function invokeClass($class, $vars = [])
- {
- $reflect = new \ReflectionClass($class);
- $constructor = $reflect->getConstructor();
- $args = $constructor ? self::bindParams($constructor, $vars) : [];
-
- return $reflect->newInstanceArgs($args);
- }
-
- /**
- * 绑定参数
- * @access private
- * @param \ReflectionMethod|\ReflectionFunction $reflect 反射类
- * @param array $vars 变量
- * @return array
- */
- private static function bindParams($reflect, $vars = [])
- {
- // 自动获取请求变量
- if (empty($vars)) {
- $vars = Config::get('url_param_type') ?
- Request::instance()->route() :
- Request::instance()->param();
- }
-
- $args = [];
- if ($reflect->getNumberOfParameters() > 0) {
- // 判断数组类型 数字数组时按顺序绑定参数
- reset($vars);
- $type = key($vars) === 0 ? 1 : 0;
-
- foreach ($reflect->getParameters() as $param) {
- $args[] = self::getParamValue($param, $vars, $type);
- }
- }
-
- return $args;
- }
-
- /**
- * 获取参数值
- * @access private
- * @param \ReflectionParameter $param 参数
- * @param array $vars 变量
- * @param string $type 类别
- * @return array
- */
- private static function getParamValue($param, &$vars, $type)
- {
- $name = $param->getName();
- $reflectionType = $param->getType();
-
- if ($reflectionType && $reflectionType->isBuiltin() === false) {
- $className = $reflectionType->getName();
- $bind = Request::instance()->$name;
-
- if ($bind instanceof $className) {
- $result = $bind;
- } else {
- if (method_exists($className, 'invoke')) {
- $method = new \ReflectionMethod($className, 'invoke');
-
- if ($method->isPublic() && $method->isStatic()) {
- return $className::invoke(Request::instance());
- }
- }
-
- $result = method_exists($className, 'instance') ?
- $className::instance() :
- new $className;
- }
- } elseif (1 == $type && !empty($vars)) {
- $result = array_shift($vars);
- } elseif (0 == $type && isset($vars[$name])) {
- $result = $vars[$name];
- } elseif ($param->isDefaultValueAvailable()) {
- $result = $param->getDefaultValue();
- } else {
- throw new \InvalidArgumentException('method param miss:' . $name);
- }
-
- return $result;
- }
-
- /**
- * 执行调用分发
- * @access protected
- * @param array $dispatch 调用信息
- * @param array $config 配置信息
- * @return Response|mixed
- * @throws \InvalidArgumentException
- */
- protected static function exec($dispatch, $config)
- {
- switch ($dispatch['type']) {
- case 'redirect': // 重定向跳转
- $data = Response::create($dispatch['url'], 'redirect')
- ->code($dispatch['status']);
- break;
- case 'module': // 模块/控制器/操作
- $data = self::module(
- $dispatch['module'],
- $config,
- isset($dispatch['convert']) ? $dispatch['convert'] : null
- );
- break;
- case 'controller': // 执行控制器操作
- $vars = array_merge(Request::instance()->param(), $dispatch['var']);
- $data = Loader::action(
- $dispatch['controller'],
- $vars,
- $config['url_controller_layer'],
- $config['controller_suffix']
- );
- break;
- case 'method': // 回调方法
- $vars = array_merge(Request::instance()->param(), $dispatch['var']);
- $data = self::invokeMethod($dispatch['method'], $vars);
- break;
- case 'function': // 闭包
- $data = self::invokeFunction($dispatch['function']);
- break;
- case 'response': // Response 实例
- $data = $dispatch['response'];
- break;
- default:
- throw new \InvalidArgumentException('dispatch type not support');
- }
-
- return $data;
- }
-
- /**
- * 执行模块
- * @access public
- * @param array $result 模块/控制器/操作
- * @param array $config 配置参数
- * @param bool $convert 是否自动转换控制器和操作名
- * @return mixed
- * @throws HttpException
- */
- public static function module($result, $config, $convert = null)
- {
- if (is_string($result)) {
- $result = explode('/', $result);
- }
-
- $request = Request::instance();
-
- if ($config['app_multi_module']) {
- // 多模块部署
- $module = strip_tags(strtolower($result[0] ?: $config['default_module']));
- $bind = Route::getBind('module');
- $available = false;
-
- if ($bind) {
- // 绑定模块
- list($bindModule) = explode('/', $bind);
-
- if (empty($result[0])) {
- $module = $bindModule;
- $available = true;
- } elseif ($module == $bindModule) {
- $available = true;
- }
- } elseif (!in_array($module, $config['deny_module_list']) && is_dir(APP_PATH . $module)) {
- $available = true;
- }
-
- // 模块初始化
- if ($module && $available) {
- // 初始化模块
- $request->module($module);
- $config = self::init($module);
-
- // 模块请求缓存检查
- $request->cache(
- $config['request_cache'],
- $config['request_cache_expire'],
- $config['request_cache_except']
- );
- } else {
- throw new HttpException(404, 'module not exists:' . $module);
- }
- } else {
- // 单一模块部署
- $module = '';
- $request->module($module);
- }
-
- // 设置默认过滤机制
- $request->filter($config['default_filter']);
-
- // 当前模块路径
- App::$modulePath = APP_PATH . ($module ? $module . DS : '');
-
- // 是否自动转换控制器和操作名
- $convert = is_bool($convert) ? $convert : $config['url_convert'];
-
- // 获取控制器名
- $controller = strip_tags($result[1] ?: $config['default_controller']);
-
- if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) {
- throw new HttpException(404, 'controller not exists:' . $controller);
- }
-
- $controller = $convert ? strtolower($controller) : $controller;
-
- // 获取操作名
- $actionName = strip_tags($result[2] ?: $config['default_action']);
- if (!empty($config['action_convert'])) {
- $actionName = Loader::parseName($actionName, 1);
- } else {
- $actionName = $convert ? strtolower($actionName) : $actionName;
- }
-
- // 设置当前请求的控制器、操作
- $request->controller(Loader::parseName($controller, 1))->action($actionName);
-
- // 监听module_init
- Hook::listen('module_init', $request);
-
- try {
- $instance = Loader::controller(
- $controller,
- $config['url_controller_layer'],
- $config['controller_suffix'],
- $config['empty_controller']
- );
- } catch (ClassNotFoundException $e) {
- throw new HttpException(404, 'controller not exists:' . $e->getClass());
- }
-
- // 获取当前操作名
- $action = $actionName . $config['action_suffix'];
-
- $vars = [];
- if (is_callable([$instance, $action])) {
- // 执行操作方法
- $call = [$instance, $action];
- // 严格获取当前操作方法名
- $reflect = new \ReflectionMethod($instance, $action);
- $methodName = $reflect->getName();
- $suffix = $config['action_suffix'];
- $actionName = $suffix ? substr($methodName, 0, -strlen($suffix)) : $methodName;
- $request->action($actionName);
-
- } elseif (is_callable([$instance, '_empty'])) {
- // 空操作
- $call = [$instance, '_empty'];
- $vars = [$actionName];
- } else {
- // 操作不存在
- throw new HttpException(404, 'method not exists:' . get_class($instance) . '->' . $action . '()');
- }
-
- Hook::listen('action_begin', $call);
-
- return self::invokeMethod($call, $vars);
- }
-
- /**
- * URL路由检测(根据PATH_INFO)
- * @access public
- * @param \think\Request $request 请求实例
- * @param array $config 配置信息
- * @return array
- * @throws \think\Exception
- */
- public static function routeCheck($request, array $config)
- {
- $path = $request->path();
- $depr = $config['pathinfo_depr'];
- $result = false;
-
- // 路由检测
- $check = !is_null(self::$routeCheck) ? self::$routeCheck : $config['url_route_on'];
- if ($check) {
- // 开启路由
- if (is_file(RUNTIME_PATH . 'route.php')) {
- // 读取路由缓存
- $rules = include RUNTIME_PATH . 'route.php';
- is_array($rules) && Route::rules($rules);
- } else {
- $files = $config['route_config_file'];
- foreach ($files as $file) {
- if (is_file(CONF_PATH . $file . CONF_EXT)) {
- // 导入路由配置
- $rules = include CONF_PATH . $file . CONF_EXT;
- is_array($rules) && Route::import($rules);
- }
- }
- }
-
- // 路由检测(根据路由定义返回不同的URL调度)
- $result = Route::check($request, $path, $depr, $config['url_domain_deploy']);
- $must = !is_null(self::$routeMust) ? self::$routeMust : $config['url_route_must'];
-
- if ($must && false === $result) {
- // 路由无效
- throw new RouteNotFoundException();
- }
- }
-
- // 路由无效 解析模块/控制器/操作/参数... 支持控制器自动搜索
- if (false === $result) {
- $result = Route::parseUrl($path, $depr, $config['controller_auto_search']);
- }
-
- return $result;
- }
-
- /**
- * 设置应用的路由检测机制
- * @access public
- * @param bool $route 是否需要检测路由
- * @param bool $must 是否强制检测路由
- * @return void
- */
- public static function route($route, $must = false)
- {
- self::$routeCheck = $route;
- self::$routeMust = $must;
- }
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Build.php b/digital_doctor_admin/thinkphp/library/think/Build.php
deleted file mode 100644
index de7c327..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Build.php
+++ /dev/null
@@ -1,235 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-class Build
-{
- /**
- * 根据传入的 build 资料创建目录和文件
- * @access public
- * @param array $build build 列表
- * @param string $namespace 应用类库命名空间
- * @param bool $suffix 类库后缀
- * @return void
- * @throws Exception
- */
- public static function run(array $build = [], $namespace = 'app', $suffix = false)
- {
- // 锁定
- $lock = APP_PATH . 'build.lock';
-
- // 如果锁定文件不可写(不存在)则进行处理,否则表示已经有程序在处理了
- if (!is_writable($lock)) {
- if (!touch($lock)) {
- throw new Exception(
- '应用目录[' . APP_PATH . ']不可写,目录无法自动生成!
请手动生成项目目录~',
- 10006
- );
- }
-
- foreach ($build as $module => $list) {
- if ('__dir__' == $module) {
- // 创建目录列表
- self::buildDir($list);
- } elseif ('__file__' == $module) {
- // 创建文件列表
- self::buildFile($list);
- } else {
- // 创建模块
- self::module($module, $list, $namespace, $suffix);
- }
- }
-
- // 解除锁定
- unlink($lock);
- }
- }
-
- /**
- * 创建目录
- * @access protected
- * @param array $list 目录列表
- * @return void
- */
- protected static function buildDir($list)
- {
- foreach ($list as $dir) {
- // 目录不存在则创建目录
- !is_dir(APP_PATH . $dir) && mkdir(APP_PATH . $dir, 0755, true);
- }
- }
-
- /**
- * 创建文件
- * @access protected
- * @param array $list 文件列表
- * @return void
- */
- protected static function buildFile($list)
- {
- foreach ($list as $file) {
- // 先创建目录
- if (!is_dir(APP_PATH . dirname($file))) {
- mkdir(APP_PATH . dirname($file), 0755, true);
- }
-
- // 再创建文件
- if (!is_file(APP_PATH . $file)) {
- file_put_contents(
- APP_PATH . $file,
- 'php' == pathinfo($file, PATHINFO_EXTENSION) ? " ['config.php', 'common.php'],
- '__dir__' => ['controller', 'model', 'view'],
- ];
- }
-
- // 创建子目录和文件
- foreach ($list as $path => $file) {
- $modulePath = APP_PATH . $module . DS;
-
- if ('__dir__' == $path) {
- // 生成子目录
- foreach ($file as $dir) {
- self::checkDirBuild($modulePath . $dir);
- }
- } elseif ('__file__' == $path) {
- // 生成(空白)文件
- foreach ($file as $name) {
- if (!is_file($modulePath . $name)) {
- file_put_contents(
- $modulePath . $name,
- 'php' == pathinfo($name, PATHINFO_EXTENSION) ? "
-// +----------------------------------------------------------------------
-
-namespace think;
-
-use think\cache\Driver;
-
-class Cache
-{
- /**
- * @var array 缓存的实例
- */
- public static $instance = [];
-
- /**
- * @var int 缓存读取次数
- */
- public static $readTimes = 0;
-
- /**
- * @var int 缓存写入次数
- */
- public static $writeTimes = 0;
-
- /**
- * @var object 操作句柄
- */
- public static $handler;
-
- /**
- * 连接缓存驱动
- * @access public
- * @param array $options 配置数组
- * @param bool|string $name 缓存连接标识 true 强制重新连接
- * @return Driver
- */
- public static function connect(array $options = [], $name = false)
- {
- $type = !empty($options['type']) ? $options['type'] : 'File';
-
- if (false === $name) {
- $name = md5(serialize($options));
- }
-
- if (true === $name || !isset(self::$instance[$name])) {
- $class = false === strpos($type, '\\') ?
- '\\think\\cache\\driver\\' . ucwords($type) :
- $type;
-
- // 记录初始化信息
- App::$debug && Log::record('[ CACHE ] INIT ' . $type, 'info');
-
- if (true === $name) {
- return new $class($options);
- }
-
- self::$instance[$name] = new $class($options);
- }
-
- return self::$instance[$name];
- }
-
- /**
- * 自动初始化缓存
- * @access public
- * @param array $options 配置数组
- * @return Driver
- */
- public static function init(array $options = [])
- {
- if (is_null(self::$handler)) {
- if (empty($options) && 'complex' == Config::get('cache.type')) {
- $default = Config::get('cache.default');
- // 获取默认缓存配置,并连接
- $options = Config::get('cache.' . $default['type']) ?: $default;
- } elseif (empty($options)) {
- $options = Config::get('cache');
- }
-
- self::$handler = self::connect($options);
- }
-
- return self::$handler;
- }
-
- /**
- * 切换缓存类型 需要配置 cache.type 为 complex
- * @access public
- * @param string $name 缓存标识
- * @return Driver
- */
- public static function store($name = '')
- {
- if ('' !== $name && 'complex' == Config::get('cache.type')) {
- return self::connect(Config::get('cache.' . $name), strtolower($name));
- }
-
- return self::init();
- }
-
- /**
- * 判断缓存是否存在
- * @access public
- * @param string $name 缓存变量名
- * @return bool
- */
- public static function has($name)
- {
- self::$readTimes++;
-
- return self::init()->has($name);
- }
-
- /**
- * 读取缓存
- * @access public
- * @param string $name 缓存标识
- * @param mixed $default 默认值
- * @return mixed
- */
- public static function get($name, $default = false)
- {
- self::$readTimes++;
-
- return self::init()->get($name, $default);
- }
-
- /**
- * 写入缓存
- * @access public
- * @param string $name 缓存标识
- * @param mixed $value 存储数据
- * @param int|null $expire 有效时间 0为永久
- * @return boolean
- */
- public static function set($name, $value, $expire = null)
- {
- self::$writeTimes++;
-
- return self::init()->set($name, $value, $expire);
- }
-
- /**
- * 自增缓存(针对数值缓存)
- * @access public
- * @param string $name 缓存变量名
- * @param int $step 步长
- * @return false|int
- */
- public static function inc($name, $step = 1)
- {
- self::$writeTimes++;
-
- return self::init()->inc($name, $step);
- }
-
- /**
- * 自减缓存(针对数值缓存)
- * @access public
- * @param string $name 缓存变量名
- * @param int $step 步长
- * @return false|int
- */
- public static function dec($name, $step = 1)
- {
- self::$writeTimes++;
-
- return self::init()->dec($name, $step);
- }
-
- /**
- * 删除缓存
- * @access public
- * @param string $name 缓存标识
- * @return boolean
- */
- public static function rm($name)
- {
- self::$writeTimes++;
-
- return self::init()->rm($name);
- }
-
- /**
- * 清除缓存
- * @access public
- * @param string $tag 标签名
- * @return boolean
- */
- public static function clear($tag = null)
- {
- self::$writeTimes++;
-
- return self::init()->clear($tag);
- }
-
- /**
- * 读取缓存并删除
- * @access public
- * @param string $name 缓存变量名
- * @return mixed
- */
- public static function pull($name)
- {
- self::$readTimes++;
- self::$writeTimes++;
-
- return self::init()->pull($name);
- }
-
- /**
- * 如果不存在则写入缓存
- * @access public
- * @param string $name 缓存变量名
- * @param mixed $value 存储数据
- * @param int $expire 有效时间 0为永久
- * @return mixed
- */
- public static function remember($name, $value, $expire = null)
- {
- self::$readTimes++;
-
- return self::init()->remember($name, $value, $expire);
- }
-
- /**
- * 缓存标签
- * @access public
- * @param string $name 标签名
- * @param string|array $keys 缓存标识
- * @param bool $overlay 是否覆盖
- * @return Driver
- */
- public static function tag($name, $keys = null, $overlay = false)
- {
- return self::init()->tag($name, $keys, $overlay);
- }
-
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Collection.php b/digital_doctor_admin/thinkphp/library/think/Collection.php
deleted file mode 100644
index 0ff1dfc..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Collection.php
+++ /dev/null
@@ -1,474 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-use ArrayAccess;
-use ArrayIterator;
-use Countable;
-use IteratorAggregate;
-use JsonSerializable;
-
-class Collection implements ArrayAccess, Countable, IteratorAggregate, JsonSerializable
-{
- /**
- * @var array 数据
- */
- protected $items = [];
-
- /**
- * Collection constructor.
- * @access public
- * @param array $items 数据
- */
- public function __construct($items = [])
- {
- $this->items = $this->convertToArray($items);
- }
-
- /**
- * 创建 Collection 实例
- * @access public
- * @param array $items 数据
- * @return static
- */
- public static function make($items = [])
- {
- return new static($items);
- }
-
- /**
- * 判断数据是否为空
- * @access public
- * @return bool
- */
- public function isEmpty()
- {
- return empty($this->items);
- }
-
- /**
- * 将数据转成数组
- * @access public
- * @return array
- */
- public function toArray()
- {
- return array_map(function ($value) {
- return ($value instanceof Model || $value instanceof self) ?
- $value->toArray() :
- $value;
- }, $this->items);
- }
-
- /**
- * 获取全部的数据
- * @access public
- * @return array
- */
- public function all()
- {
- return $this->items;
- }
-
- /**
- * 交换数组中的键和值
- * @access public
- * @return static
- */
- public function flip()
- {
- return new static(array_flip($this->items));
- }
-
- /**
- * 返回数组中所有的键名组成的新 Collection 实例
- * @access public
- * @return static
- */
- public function keys()
- {
- return new static(array_keys($this->items));
- }
-
- /**
- * 返回数组中所有的值组成的新 Collection 实例
- * @access public
- * @return static
- */
- public function values()
- {
- return new static(array_values($this->items));
- }
-
- /**
- * 合并数组并返回一个新的 Collection 实例
- * @access public
- * @param mixed $items 新的数据
- * @return static
- */
- public function merge($items)
- {
- return new static(array_merge($this->items, $this->convertToArray($items)));
- }
-
- /**
- * 比较数组,返回差集生成的新 Collection 实例
- * @access public
- * @param mixed $items 做比较的数据
- * @return static
- */
- public function diff($items)
- {
- return new static(array_diff($this->items, $this->convertToArray($items)));
- }
-
- /**
- * 比较数组,返回交集组成的 Collection 新实例
- * @access public
- * @param mixed $items 比较数据
- * @return static
- */
- public function intersect($items)
- {
- return new static(array_intersect($this->items, $this->convertToArray($items)));
- }
-
- /**
- * 返回并删除数据中的的最后一个元素(出栈)
- * @access public
- * @return mixed
- */
- public function pop()
- {
- return array_pop($this->items);
- }
-
- /**
- * 返回并删除数据中首个元素
- * @access public
- * @return mixed
- */
- public function shift()
- {
- return array_shift($this->items);
- }
-
- /**
- * 在数组开头插入一个元素
- * @access public
- * @param mixed $value 值
- * @param mixed $key 键名
- * @return void
- */
- public function unshift($value, $key = null)
- {
- if (is_null($key)) {
- array_unshift($this->items, $value);
- } else {
- $this->items = [$key => $value] + $this->items;
- }
- }
-
- /**
- * 在数组结尾插入一个元素
- * @access public
- * @param mixed $value 值
- * @param mixed $key 键名
- * @return void
- */
- public function push($value, $key = null)
- {
- if (is_null($key)) {
- $this->items[] = $value;
- } else {
- $this->items[$key] = $value;
- }
- }
-
- /**
- * 通过使用用户自定义函数,以字符串返回数组
- * @access public
- * @param callable $callback 回调函数
- * @param mixed $initial 初始值
- * @return mixed
- */
- public function reduce(callable $callback, $initial = null)
- {
- return array_reduce($this->items, $callback, $initial);
- }
-
- /**
- * 以相反的顺序创建一个新的 Collection 实例
- * @access public
- * @return static
- */
- public function reverse()
- {
- return new static(array_reverse($this->items));
- }
-
- /**
- * 把数据分割为新的数组块
- * @access public
- * @param int $size 分隔长度
- * @param bool $preserveKeys 是否保持原数据索引
- * @return static
- */
- public function chunk($size, $preserveKeys = false)
- {
- $chunks = [];
-
- foreach (array_chunk($this->items, $size, $preserveKeys) as $chunk) {
- $chunks[] = new static($chunk);
- }
-
- return new static($chunks);
- }
-
- /**
- * 给数据中的每个元素执行回调
- * @access public
- * @param callable $callback 回调函数
- * @return $this
- */
- public function each(callable $callback)
- {
- foreach ($this->items as $key => $item) {
- $result = $callback($item, $key);
-
- if (false === $result) {
- break;
- }
-
- if (!is_object($item)) {
- $this->items[$key] = $result;
- }
- }
-
- return $this;
- }
-
- /**
- * 用回调函数过滤数据中的元素
- * @access public
- * @param callable|null $callback 回调函数
- * @return static
- */
- public function filter(callable $callback = null)
- {
- return new static(array_filter($this->items, $callback ?: null));
- }
-
- /**
- * 返回数据中指定的一列
- * @access public
- * @param mixed $columnKey 键名
- * @param null $indexKey 作为索引值的列
- * @return array
- */
- public function column($columnKey, $indexKey = null)
- {
- if (function_exists('array_column')) {
- return array_column($this->items, $columnKey, $indexKey);
- }
-
- $result = [];
- foreach ($this->items as $row) {
- $key = $value = null;
- $keySet = $valueSet = false;
-
- if (null !== $indexKey && array_key_exists($indexKey, $row)) {
- $key = (string) $row[$indexKey];
- $keySet = true;
- }
-
- if (null === $columnKey) {
- $valueSet = true;
- $value = $row;
- } elseif (is_array($row) && array_key_exists($columnKey, $row)) {
- $valueSet = true;
- $value = $row[$columnKey];
- }
-
- if ($valueSet) {
- if ($keySet) {
- $result[$key] = $value;
- } else {
- $result[] = $value;
- }
- }
- }
-
- return $result;
- }
-
- /**
- * 对数据排序,并返回排序后的数据组成的新 Collection 实例
- * @access public
- * @param callable|null $callback 回调函数
- * @return static
- */
- public function sort(callable $callback = null)
- {
- $items = $this->items;
- $callback = $callback ?: function ($a, $b) {
- return $a == $b ? 0 : (($a < $b) ? -1 : 1);
- };
-
- uasort($items, $callback);
- return new static($items);
- }
-
- /**
- * 将数据打乱后组成新的 Collection 实例
- * @access public
- * @return static
- */
- public function shuffle()
- {
- $items = $this->items;
-
- shuffle($items);
- return new static($items);
- }
-
- /**
- * 截取数据并返回新的 Collection 实例
- * @access public
- * @param int $offset 起始位置
- * @param int $length 截取长度
- * @param bool $preserveKeys 是否保持原先的键名
- * @return static
- */
- public function slice($offset, $length = null, $preserveKeys = false)
- {
- return new static(array_slice($this->items, $offset, $length, $preserveKeys));
- }
-
- /**
- * 指定的键是否存在
- * @access public
- * @param mixed $offset 键名
- * @return bool
- */
- #[\ReturnTypeWillChange]
- public function offsetExists($offset)
- {
- return array_key_exists($offset, $this->items);
- }
-
- /**
- * 获取指定键对应的值
- * @access public
- * @param mixed $offset 键名
- * @return mixed
- */
- #[\ReturnTypeWillChange]
- public function offsetGet($offset)
- {
- return $this->items[$offset];
- }
-
- /**
- * 设置键值
- * @access public
- * @param mixed $offset 键名
- * @param mixed $value 值
- * @return void
- */
- #[\ReturnTypeWillChange]
- public function offsetSet($offset, $value)
- {
- if (is_null($offset)) {
- $this->items[] = $value;
- } else {
- $this->items[$offset] = $value;
- }
- }
-
- /**
- * 删除指定键值
- * @access public
- * @param mixed $offset 键名
- * @return void
- */
- #[\ReturnTypeWillChange]
- public function offsetUnset($offset)
- {
- unset($this->items[$offset]);
- }
-
- /**
- * 统计数据的个数
- * @access public
- * @return int
- */
- #[\ReturnTypeWillChange]
- public function count()
- {
- return count($this->items);
- }
-
- /**
- * 获取数据的迭代器
- * @access public
- * @return ArrayIterator
- */
- #[\ReturnTypeWillChange]
- public function getIterator()
- {
- return new ArrayIterator($this->items);
- }
-
- /**
- * 将数据反序列化成数组
- * @access public
- * @return array
- */
- #[\ReturnTypeWillChange]
- public function jsonSerialize()
- {
- return $this->toArray();
- }
-
- /**
- * 转换当前数据集为 JSON 字符串
- * @access public
- * @param integer $options json 参数
- * @return string
- */
- public function toJson($options = JSON_UNESCAPED_UNICODE)
- {
- return json_encode($this->toArray(), $options);
- }
-
- /**
- * 将数据转换成字符串
- * @access public
- * @return string
- */
- public function __toString()
- {
- return $this->toJson();
- }
-
- /**
- * 将数据转换成数组
- * @access protected
- * @param mixed $items 数据
- * @return array
- */
- protected function convertToArray($items)
- {
- return $items instanceof self ? $items->all() : (array) $items;
- }
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Config.php b/digital_doctor_admin/thinkphp/library/think/Config.php
deleted file mode 100644
index 8fa668d..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Config.php
+++ /dev/null
@@ -1,214 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-class Config
-{
- /**
- * @var array 配置参数
- */
- private static $config = [];
-
- /**
- * @var string 参数作用域
- */
- private static $range = '_sys_';
-
- /**
- * 设定配置参数的作用域
- * @access public
- * @param string $range 作用域
- * @return void
- */
- public static function range($range)
- {
- self::$range = $range;
-
- if (!isset(self::$config[$range])) self::$config[$range] = [];
- }
-
- /**
- * 解析配置文件或内容
- * @access public
- * @param string $config 配置文件路径或内容
- * @param string $type 配置解析类型
- * @param string $name 配置名(如设置即表示二级配置)
- * @param string $range 作用域
- * @return mixed
- */
- public static function parse($config, $type = '', $name = '', $range = '')
- {
- $range = $range ?: self::$range;
-
- if (empty($type)) $type = pathinfo($config, PATHINFO_EXTENSION);
-
- $class = false !== strpos($type, '\\') ?
- $type :
- '\\think\\config\\driver\\' . ucwords($type);
-
- return self::set((new $class())->parse($config), $name, $range);
- }
-
- /**
- * 加载配置文件(PHP格式)
- * @access public
- * @param string $file 配置文件名
- * @param string $name 配置名(如设置即表示二级配置)
- * @param string $range 作用域
- * @return mixed
- */
- public static function load($file, $name = '', $range = '')
- {
- $range = $range ?: self::$range;
-
- if (!isset(self::$config[$range])) self::$config[$range] = [];
-
- if (is_file($file)) {
- $name = strtolower($name);
- $type = pathinfo($file, PATHINFO_EXTENSION);
-
- if ('php' == $type) {
- return self::set(include $file, $name, $range);
- }
-
- if ('yaml' == $type && function_exists('yaml_parse_file')) {
- return self::set(yaml_parse_file($file), $name, $range);
- }
-
- return self::parse($file, $type, $name, $range);
- }
-
- return self::$config[$range];
- }
-
- /**
- * 检测配置是否存在
- * @access public
- * @param string $name 配置参数名(支持二级配置 . 号分割)
- * @param string $range 作用域
- * @return bool
- */
- public static function has($name, $range = '')
- {
- $range = $range ?: self::$range;
-
- if (!strpos($name, '.')) {
- return isset(self::$config[$range][strtolower($name)]);
- }
-
- // 二维数组设置和获取支持
- $name = explode('.', $name, 2);
- return isset(self::$config[$range][strtolower($name[0])][$name[1]]);
- }
-
- /**
- * 获取配置参数 为空则获取所有配置
- * @access public
- * @param string $name 配置参数名(支持二级配置 . 号分割)
- * @param string $range 作用域
- * @return mixed
- */
- public static function get($name = null, $range = '')
- {
- $range = $range ?: self::$range;
-
- // 无参数时获取所有
- if (empty($name) && isset(self::$config[$range])) {
- return self::$config[$range];
- }
-
- // 非二级配置时直接返回
- if (!strpos($name, '.')) {
- $name = strtolower($name);
- return isset(self::$config[$range][$name]) ? self::$config[$range][$name] : null;
- }
-
- // 二维数组设置和获取支持
- $name = explode('.', $name, 2);
- $name[0] = strtolower($name[0]);
-
- if (!isset(self::$config[$range][$name[0]])) {
- // 动态载入额外配置
- $module = Request::instance()->module();
- $file = CONF_PATH . ($module ? $module . DS : '') . 'extra' . DS . $name[0] . CONF_EXT;
-
- is_file($file) && self::load($file, $name[0]);
- }
-
- return isset(self::$config[$range][$name[0]][$name[1]]) ?
- self::$config[$range][$name[0]][$name[1]] :
- null;
- }
-
- /**
- * 设置配置参数 name 为数组则为批量设置
- * @access public
- * @param string|array $name 配置参数名(支持二级配置 . 号分割)
- * @param mixed $value 配置值
- * @param string $range 作用域
- * @return mixed
- */
- public static function set($name, $value = null, $range = '')
- {
- $range = $range ?: self::$range;
-
- if (!isset(self::$config[$range])) self::$config[$range] = [];
-
- // 字符串则表示单个配置设置
- if (is_string($name)) {
- if (!strpos($name, '.')) {
- self::$config[$range][strtolower($name)] = $value;
- } else {
- // 二维数组
- $name = explode('.', $name, 2);
- self::$config[$range][strtolower($name[0])][$name[1]] = $value;
- }
-
- return $value;
- }
-
- // 数组则表示批量设置
- if (is_array($name)) {
- if (!empty($value)) {
- self::$config[$range][$value] = isset(self::$config[$range][$value]) ?
- array_merge(self::$config[$range][$value], $name) :
- $name;
-
- return self::$config[$range][$value];
- }
-
- return self::$config[$range] = array_merge(
- self::$config[$range], array_change_key_case($name)
- );
- }
-
- // 为空直接返回已有配置
- return self::$config[$range];
- }
-
- /**
- * 重置配置参数
- * @access public
- * @param string $range 作用域
- * @return void
- */
- public static function reset($range = '')
- {
- $range = $range ?: self::$range;
-
- if (true === $range) {
- self::$config = [];
- } else {
- self::$config[$range] = [];
- }
- }
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Console.php b/digital_doctor_admin/thinkphp/library/think/Console.php
deleted file mode 100644
index 32b2572..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Console.php
+++ /dev/null
@@ -1,863 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-use think\console\Command;
-use think\console\command\Help as HelpCommand;
-use think\console\Input;
-use think\console\input\Argument as InputArgument;
-use think\console\input\Definition as InputDefinition;
-use think\console\input\Option as InputOption;
-use think\console\Output;
-use think\console\output\driver\Buffer;
-
-class Console
-{
- /**
- * @var string 命令名称
- */
- private $name;
-
- /**
- * @var string 命令版本
- */
- private $version;
-
- /**
- * @var Command[] 命令
- */
- private $commands = [];
-
- /**
- * @var bool 是否需要帮助信息
- */
- private $wantHelps = false;
-
- /**
- * @var bool 是否捕获异常
- */
- private $catchExceptions = true;
-
- /**
- * @var bool 是否自动退出执行
- */
- private $autoExit = true;
-
- /**
- * @var InputDefinition 输入定义
- */
- private $definition;
-
- /**
- * @var string 默认执行的命令
- */
- private $defaultCommand;
-
- /**
- * @var array 默认提供的命令
- */
- private static $defaultCommands = [
- "think\\console\\command\\Help",
- "think\\console\\command\\Lists",
- "think\\console\\command\\Build",
- "think\\console\\command\\Clear",
- "think\\console\\command\\make\\Controller",
- "think\\console\\command\\make\\Model",
- "think\\console\\command\\optimize\\Autoload",
- "think\\console\\command\\optimize\\Config",
- "think\\console\\command\\optimize\\Route",
- "think\\console\\command\\optimize\\Schema",
- ];
-
- /**
- * Console constructor.
- * @access public
- * @param string $name 名称
- * @param string $version 版本
- * @param null|string $user 执行用户
- */
- public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN', $user = null)
- {
- $this->name = $name;
- $this->version = $version;
-
- if ($user) {
- $this->setUser($user);
- }
-
- $this->defaultCommand = 'list';
- $this->definition = $this->getDefaultInputDefinition();
-
- foreach ($this->getDefaultCommands() as $command) {
- $this->add($command);
- }
- }
-
- /**
- * 设置执行用户
- * @param $user
- */
- public function setUser($user)
- {
- $user = posix_getpwnam($user);
- if ($user) {
- posix_setuid($user['uid']);
- posix_setgid($user['gid']);
- }
- }
-
- /**
- * 初始化 Console
- * @access public
- * @param bool $run 是否运行 Console
- * @return int|Console
- */
- public static function init($run = true)
- {
- static $console;
-
- if (!$console) {
- $config = Config::get('console');
- // 实例化 console
- $console = new self($config['name'], $config['version'], $config['user']);
-
- // 读取指令集
- if (is_file(CONF_PATH . 'command' . EXT)) {
- $commands = include CONF_PATH . 'command' . EXT;
-
- if (is_array($commands)) {
- foreach ($commands as $command) {
- class_exists($command) &&
- is_subclass_of($command, "\\think\\console\\Command") &&
- $console->add(new $command()); // 注册指令
- }
- }
- }
- }
-
- return $run ? $console->run() : $console;
- }
-
- /**
- * 调用命令
- * @access public
- * @param string $command
- * @param array $parameters
- * @param string $driver
- * @return Output
- */
- public static function call($command, array $parameters = [], $driver = 'buffer')
- {
- $console = self::init(false);
-
- array_unshift($parameters, $command);
-
- $input = new Input($parameters);
- $output = new Output($driver);
-
- $console->setCatchExceptions(false);
- $console->find($command)->run($input, $output);
-
- return $output;
- }
-
- /**
- * 执行当前的指令
- * @access public
- * @return int
- * @throws \Exception
- */
- public function run()
- {
- $input = new Input();
- $output = new Output();
-
- $this->configureIO($input, $output);
-
- try {
- $exitCode = $this->doRun($input, $output);
- } catch (\Exception $e) {
- if (!$this->catchExceptions) throw $e;
-
- $output->renderException($e);
-
- $exitCode = $e->getCode();
-
- if (is_numeric($exitCode)) {
- $exitCode = ((int) $exitCode) ?: 1;
- } else {
- $exitCode = 1;
- }
- }
-
- if ($this->autoExit) {
- if ($exitCode > 255) $exitCode = 255;
-
- exit($exitCode);
- }
-
- return $exitCode;
- }
-
- /**
- * 执行指令
- * @access public
- * @param Input $input 输入
- * @param Output $output 输出
- * @return int
- */
- public function doRun(Input $input, Output $output)
- {
- // 获取版本信息
- if (true === $input->hasParameterOption(['--version', '-V'])) {
- $output->writeln($this->getLongVersion());
-
- return 0;
- }
-
- $name = $this->getCommandName($input);
-
- // 获取帮助信息
- if (true === $input->hasParameterOption(['--help', '-h'])) {
- if (!$name) {
- $name = 'help';
- $input = new Input(['help']);
- } else {
- $this->wantHelps = true;
- }
- }
-
- if (!$name) {
- $name = $this->defaultCommand;
- $input = new Input([$this->defaultCommand]);
- }
-
- return $this->doRunCommand($this->find($name), $input, $output);
- }
-
- /**
- * 设置输入参数定义
- * @access public
- * @param InputDefinition $definition 输入定义
- * @return $this;
- */
- public function setDefinition(InputDefinition $definition)
- {
- $this->definition = $definition;
-
- return $this;
- }
-
- /**
- * 获取输入参数定义
- * @access public
- * @return InputDefinition
- */
- public function getDefinition()
- {
- return $this->definition;
- }
-
- /**
- * 获取帮助信息
- * @access public
- * @return string
- */
- public function getHelp()
- {
- return $this->getLongVersion();
- }
-
- /**
- * 设置是否捕获异常
- * @access public
- * @param bool $boolean 是否捕获
- * @return $this
- */
- public function setCatchExceptions($boolean)
- {
- $this->catchExceptions = (bool) $boolean;
-
- return $this;
- }
-
- /**
- * 设置是否自动退出
- * @access public
- * @param bool $boolean 是否自动退出
- * @return $this
- */
- public function setAutoExit($boolean)
- {
- $this->autoExit = (bool) $boolean;
-
- return $this;
- }
-
- /**
- * 获取名称
- * @access public
- * @return string
- */
- public function getName()
- {
- return $this->name;
- }
-
- /**
- * 设置名称
- * @access public
- * @param string $name 名称
- * @return $this
- */
- public function setName($name)
- {
- $this->name = $name;
-
- return $this;
- }
-
- /**
- * 获取版本
- * @access public
- * @return string
- */
- public function getVersion()
- {
- return $this->version;
- }
-
- /**
- * 设置版本
- * @access public
- * @param string $version 版本信息
- * @return $this
- */
- public function setVersion($version)
- {
- $this->version = $version;
-
- return $this;
- }
-
- /**
- * 获取完整的版本号
- * @access public
- * @return string
- */
- public function getLongVersion()
- {
- if ('UNKNOWN' !== $this->getName() && 'UNKNOWN' !== $this->getVersion()) {
- return sprintf(
- '%s version %s',
- $this->getName(),
- $this->getVersion()
- );
- }
-
- return 'Console Tool';
- }
-
- /**
- * 注册一个指令
- * @access public
- * @param string $name 指令名称
- * @return Command
- */
- public function register($name)
- {
- return $this->add(new Command($name));
- }
-
- /**
- * 批量添加指令
- * @access public
- * @param Command[] $commands 指令实例
- * @return $this
- */
- public function addCommands(array $commands)
- {
- foreach ($commands as $command) $this->add($command);
-
- return $this;
- }
-
- /**
- * 添加一个指令
- * @access public
- * @param Command $command 命令实例
- * @return Command|bool
- */
- public function add(Command $command)
- {
- if (!$command->isEnabled()) {
- $command->setConsole(null);
- return false;
- }
-
- $command->setConsole($this);
-
- if (null === $command->getDefinition()) {
- throw new \LogicException(
- sprintf('Command class "%s" is not correctly initialized. You probably forgot to call the parent constructor.', get_class($command))
- );
- }
-
- $this->commands[$command->getName()] = $command;
-
- foreach ($command->getAliases() as $alias) {
- $this->commands[$alias] = $command;
- }
-
- return $command;
- }
-
- /**
- * 获取指令
- * @access public
- * @param string $name 指令名称
- * @return Command
- * @throws \InvalidArgumentException
- */
- public function get($name)
- {
- if (!isset($this->commands[$name])) {
- throw new \InvalidArgumentException(
- sprintf('The command "%s" does not exist.', $name)
- );
- }
-
- $command = $this->commands[$name];
-
- if ($this->wantHelps) {
- $this->wantHelps = false;
-
- /** @var HelpCommand $helpCommand */
- $helpCommand = $this->get('help');
- $helpCommand->setCommand($command);
-
- return $helpCommand;
- }
-
- return $command;
- }
-
- /**
- * 某个指令是否存在
- * @access public
- * @param string $name 指令名称
- * @return bool
- */
- public function has($name)
- {
- return isset($this->commands[$name]);
- }
-
- /**
- * 获取所有的命名空间
- * @access public
- * @return array
- */
- public function getNamespaces()
- {
- $namespaces = [];
-
- foreach ($this->commands as $command) {
- $namespaces = array_merge(
- $namespaces, $this->extractAllNamespaces($command->getName())
- );
-
- foreach ($command->getAliases() as $alias) {
- $namespaces = array_merge(
- $namespaces, $this->extractAllNamespaces($alias)
- );
- }
- }
-
- return array_values(array_unique(array_filter($namespaces)));
- }
-
- /**
- * 查找注册命名空间中的名称或缩写
- * @access public
- * @param string $namespace
- * @return string
- * @throws \InvalidArgumentException
- */
- public function findNamespace($namespace)
- {
- $expr = preg_replace_callback('{([^:]+|)}', function ($matches) {
- return preg_quote($matches[1]) . '[^:]*';
- }, $namespace);
-
- $allNamespaces = $this->getNamespaces();
- $namespaces = preg_grep('{^' . $expr . '}', $allNamespaces);
-
- if (empty($namespaces)) {
- $message = sprintf(
- 'There are no commands defined in the "%s" namespace.', $namespace
- );
-
- if ($alternatives = $this->findAlternatives($namespace, $allNamespaces)) {
- if (1 == count($alternatives)) {
- $message .= "\n\nDid you mean this?\n ";
- } else {
- $message .= "\n\nDid you mean one of these?\n ";
- }
-
- $message .= implode("\n ", $alternatives);
- }
-
- throw new \InvalidArgumentException($message);
- }
-
- $exact = in_array($namespace, $namespaces, true);
-
- if (count($namespaces) > 1 && !$exact) {
- throw new \InvalidArgumentException(
- sprintf(
- 'The namespace "%s" is ambiguous (%s).',
- $namespace,
- $this->getAbbreviationSuggestions(array_values($namespaces)))
- );
- }
-
- return $exact ? $namespace : reset($namespaces);
- }
-
- /**
- * 查找指令
- * @access public
- * @param string $name 名称或者别名
- * @return Command
- * @throws \InvalidArgumentException
- */
- public function find($name)
- {
- $expr = preg_replace_callback('{([^:]+|)}', function ($matches) {
- return preg_quote($matches[1]) . '[^:]*';
- }, $name);
-
- $allCommands = array_keys($this->commands);
- $commands = preg_grep('{^' . $expr . '}', $allCommands);
-
- if (empty($commands) || count(preg_grep('{^' . $expr . '$}', $commands)) < 1) {
- if (false !== ($pos = strrpos($name, ':'))) {
- $this->findNamespace(substr($name, 0, $pos));
- }
-
- $message = sprintf('Command "%s" is not defined.', $name);
-
- if ($alternatives = $this->findAlternatives($name, $allCommands)) {
- if (1 == count($alternatives)) {
- $message .= "\n\nDid you mean this?\n ";
- } else {
- $message .= "\n\nDid you mean one of these?\n ";
- }
- $message .= implode("\n ", $alternatives);
- }
-
- throw new \InvalidArgumentException($message);
- }
-
- if (count($commands) > 1) {
- $commandList = $this->commands;
- $commands = array_filter($commands, function ($nameOrAlias) use ($commandList, $commands) {
- $commandName = $commandList[$nameOrAlias]->getName();
-
- return $commandName === $nameOrAlias || !in_array($commandName, $commands);
- });
- }
-
- $exact = in_array($name, $commands, true);
- if (count($commands) > 1 && !$exact) {
- $suggestions = $this->getAbbreviationSuggestions(array_values($commands));
-
- throw new \InvalidArgumentException(
- sprintf('Command "%s" is ambiguous (%s).', $name, $suggestions)
- );
- }
-
- return $this->get($exact ? $name : reset($commands));
- }
-
- /**
- * 获取所有的指令
- * @access public
- * @param string $namespace 命名空间
- * @return Command[]
- */
- public function all($namespace = null)
- {
- if (null === $namespace) return $this->commands;
-
- $commands = [];
-
- foreach ($this->commands as $name => $command) {
- $ext = $this->extractNamespace($name, substr_count($namespace, ':') + 1);
-
- if ($ext === $namespace) $commands[$name] = $command;
- }
-
- return $commands;
- }
-
- /**
- * 获取可能的指令名
- * @access public
- * @param array $names 指令名
- * @return array
- */
- public static function getAbbreviations($names)
- {
- $abbrevs = [];
- foreach ($names as $name) {
- for ($len = strlen($name); $len > 0; --$len) {
- $abbrev = substr($name, 0, $len);
- $abbrevs[$abbrev][] = $name;
- }
- }
-
- return $abbrevs;
- }
-
- /**
- * 配置基于用户的参数和选项的输入和输出实例
- * @access protected
- * @param Input $input 输入实例
- * @param Output $output 输出实例
- * @return void
- */
- protected function configureIO(Input $input, Output $output)
- {
- if (true === $input->hasParameterOption(['--ansi'])) {
- $output->setDecorated(true);
- } elseif (true === $input->hasParameterOption(['--no-ansi'])) {
- $output->setDecorated(false);
- }
-
- if (true === $input->hasParameterOption(['--no-interaction', '-n'])) {
- $input->setInteractive(false);
- }
-
- if (true === $input->hasParameterOption(['--quiet', '-q'])) {
- $output->setVerbosity(Output::VERBOSITY_QUIET);
- } else {
- if ($input->hasParameterOption('-vvv') || $input->hasParameterOption('--verbose=3') || $input->getParameterOption('--verbose') === 3) {
- $output->setVerbosity(Output::VERBOSITY_DEBUG);
- } elseif ($input->hasParameterOption('-vv') || $input->hasParameterOption('--verbose=2') || $input->getParameterOption('--verbose') === 2) {
- $output->setVerbosity(Output::VERBOSITY_VERY_VERBOSE);
- } elseif ($input->hasParameterOption('-v') || $input->hasParameterOption('--verbose=1') || $input->hasParameterOption('--verbose') || $input->getParameterOption('--verbose')) {
- $output->setVerbosity(Output::VERBOSITY_VERBOSE);
- }
- }
- }
-
- /**
- * 执行指令
- * @access protected
- * @param Command $command 指令实例
- * @param Input $input 输入实例
- * @param Output $output 输出实例
- * @return int
- * @throws \Exception
- */
- protected function doRunCommand(Command $command, Input $input, Output $output)
- {
- return $command->run($input, $output);
- }
-
- /**
- * 获取指令的名称
- * @access protected
- * @param Input $input 输入实例
- * @return string
- */
- protected function getCommandName(Input $input)
- {
- return $input->getFirstArgument();
- }
-
- /**
- * 获取默认输入定义
- * @access protected
- * @return InputDefinition
- */
- protected function getDefaultInputDefinition()
- {
- return new InputDefinition([
- new InputArgument('command', InputArgument::REQUIRED, 'The command to execute'),
- new InputOption('--help', '-h', InputOption::VALUE_NONE, 'Display this help message'),
- new InputOption('--version', '-V', InputOption::VALUE_NONE, 'Display this console version'),
- new InputOption('--quiet', '-q', InputOption::VALUE_NONE, 'Do not output any message'),
- new InputOption('--verbose', '-v|vv|vvv', InputOption::VALUE_NONE, 'Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug'),
- new InputOption('--ansi', '', InputOption::VALUE_NONE, 'Force ANSI output'),
- new InputOption('--no-ansi', '', InputOption::VALUE_NONE, 'Disable ANSI output'),
- new InputOption('--no-interaction', '-n', InputOption::VALUE_NONE, 'Do not ask any interactive question'),
- ]);
- }
-
- /**
- * 获取默认命令
- * @access protected
- * @return Command[]
- */
- protected function getDefaultCommands()
- {
- $defaultCommands = [];
-
- foreach (self::$defaultCommands as $class) {
- if (class_exists($class) && is_subclass_of($class, "think\\console\\Command")) {
- $defaultCommands[] = new $class();
- }
- }
-
- return $defaultCommands;
- }
-
- /**
- * 添加默认指令
- * @access public
- * @param array $classes 指令
- * @return void
- */
- public static function addDefaultCommands(array $classes)
- {
- self::$defaultCommands = array_merge(self::$defaultCommands, $classes);
- }
-
- /**
- * 获取可能的建议
- * @access private
- * @param array $abbrevs
- * @return string
- */
- private function getAbbreviationSuggestions($abbrevs)
- {
- return sprintf(
- '%s, %s%s',
- $abbrevs[0],
- $abbrevs[1],
- count($abbrevs) > 2 ? sprintf(' and %d more', count($abbrevs) - 2) : ''
- );
- }
-
- /**
- * 返回指令的命名空间部分
- * @access public
- * @param string $name 指令名称
- * @param string $limit 部分的命名空间的最大数量
- * @return string
- */
- public function extractNamespace($name, $limit = null)
- {
- $parts = explode(':', $name);
- array_pop($parts);
-
- return implode(':', null === $limit ? $parts : array_slice($parts, 0, $limit));
- }
-
- /**
- * 查找可替代的建议
- * @access private
- * @param string $name 指令名称
- * @param array|\Traversable $collection 建议集合
- * @return array
- */
- private function findAlternatives($name, $collection)
- {
- $threshold = 1e3;
- $alternatives = [];
- $collectionParts = [];
-
- foreach ($collection as $item) {
- $collectionParts[$item] = explode(':', $item);
- }
-
- foreach (explode(':', $name) as $i => $subname) {
- foreach ($collectionParts as $collectionName => $parts) {
- $exists = isset($alternatives[$collectionName]);
-
- if (!isset($parts[$i]) && $exists) {
- $alternatives[$collectionName] += $threshold;
- continue;
- } elseif (!isset($parts[$i])) {
- continue;
- }
-
- $lev = levenshtein($subname, $parts[$i]);
-
- if ($lev <= strlen($subname) / 3 ||
- '' !== $subname &&
- false !== strpos($parts[$i], $subname)
- ) {
- $alternatives[$collectionName] = $exists ?
- $alternatives[$collectionName] + $lev :
- $lev;
- } elseif ($exists) {
- $alternatives[$collectionName] += $threshold;
- }
- }
- }
-
- foreach ($collection as $item) {
- $lev = levenshtein($name, $item);
-
- if ($lev <= strlen($name) / 3 || false !== strpos($item, $name)) {
- $alternatives[$item] = isset($alternatives[$item]) ?
- $alternatives[$item] - $lev :
- $lev;
- }
- }
-
- $alternatives = array_filter($alternatives, function ($lev) use ($threshold) {
- return $lev < 2 * $threshold;
- });
-
- asort($alternatives);
-
- return array_keys($alternatives);
- }
-
- /**
- * 设置默认的指令
- * @access public
- * @param string $commandName 指令名称
- * @return $this
- */
- public function setDefaultCommand($commandName)
- {
- $this->defaultCommand = $commandName;
-
- return $this;
- }
-
- /**
- * 返回所有的命名空间
- * @access private
- * @param string $name 指令名称
- * @return array
- */
- private function extractAllNamespaces($name)
- {
- $namespaces = [];
-
- foreach (explode(':', $name, -1) as $part) {
- if (count($namespaces)) {
- $namespaces[] = end($namespaces) . ':' . $part;
- } else {
- $namespaces[] = $part;
- }
- }
-
- return $namespaces;
- }
-
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Controller.php b/digital_doctor_admin/thinkphp/library/think/Controller.php
deleted file mode 100644
index 77225b7..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Controller.php
+++ /dev/null
@@ -1,229 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-use think\exception\ValidateException;
-use traits\controller\Jump;
-
-Loader::import('controller/Jump', TRAIT_PATH, EXT);
-
-class Controller
-{
- use Jump;
-
- /**
- * @var \think\View 视图类实例
- */
- protected $view;
-
- /**
- * @var \think\Request Request 实例
- */
- protected $request;
-
- /**
- * @var bool 验证失败是否抛出异常
- */
- protected $failException = false;
-
- /**
- * @var bool 是否批量验证
- */
- protected $batchValidate = false;
-
- /**
- * @var array 前置操作方法列表
- */
- protected $beforeActionList = [];
-
- /**
- * 构造方法
- * @access public
- * @param Request $request Request 对象
- */
- public function __construct(Request $request = null)
- {
- $this->view = View::instance(Config::get('template'), Config::get('view_replace_str'));
- $this->request = is_null($request) ? Request::instance() : $request;
-
- // 控制器初始化
- $this->_initialize();
-
- // 前置操作方法
- if ($this->beforeActionList) {
- foreach ($this->beforeActionList as $method => $options) {
- is_numeric($method) ?
- $this->beforeAction($options) :
- $this->beforeAction($method, $options);
- }
- }
- }
-
- /**
- * 初始化操作
- * @access protected
- */
- protected function _initialize()
- {
- }
-
- /**
- * 前置操作
- * @access protected
- * @param string $method 前置操作方法名
- * @param array $options 调用参数 ['only'=>[...]] 或者 ['except'=>[...]]
- * @return void
- */
- protected function beforeAction($method, $options = [])
- {
- if (isset($options['only'])) {
- if (is_string($options['only'])) {
- $options['only'] = explode(',', $options['only']);
- }
-
- if (!in_array($this->request->action(), $options['only'])) {
- return;
- }
- } elseif (isset($options['except'])) {
- if (is_string($options['except'])) {
- $options['except'] = explode(',', $options['except']);
- }
-
- if (in_array($this->request->action(), $options['except'])) {
- return;
- }
- }
-
- call_user_func([$this, $method]);
- }
-
- /**
- * 加载模板输出
- * @access protected
- * @param string $template 模板文件名
- * @param array $vars 模板输出变量
- * @param array $replace 模板替换
- * @param array $config 模板参数
- * @return mixed
- */
- protected function fetch($template = '', $vars = [], $replace = [], $config = [])
- {
- return $this->view->fetch($template, $vars, $replace, $config);
- }
-
- /**
- * 渲染内容输出
- * @access protected
- * @param string $content 模板内容
- * @param array $vars 模板输出变量
- * @param array $replace 替换内容
- * @param array $config 模板参数
- * @return mixed
- */
- protected function display($content = '', $vars = [], $replace = [], $config = [])
- {
- return $this->view->display($content, $vars, $replace, $config);
- }
-
- /**
- * 模板变量赋值
- * @access protected
- * @param mixed $name 要显示的模板变量
- * @param mixed $value 变量的值
- * @return $this
- */
- protected function assign($name, $value = '')
- {
- $this->view->assign($name, $value);
-
- return $this;
- }
-
- /**
- * 初始化模板引擎
- * @access protected
- * @param array|string $engine 引擎参数
- * @return $this
- */
- protected function engine($engine)
- {
- $this->view->engine($engine);
-
- return $this;
- }
-
- /**
- * 设置验证失败后是否抛出异常
- * @access protected
- * @param bool $fail 是否抛出异常
- * @return $this
- */
- protected function validateFailException($fail = true)
- {
- $this->failException = $fail;
-
- return $this;
- }
-
- /**
- * 验证数据
- * @access protected
- * @param array $data 数据
- * @param string|array $validate 验证器名或者验证规则数组
- * @param array $message 提示信息
- * @param bool $batch 是否批量验证
- * @param mixed $callback 回调方法(闭包)
- * @return array|string|true
- * @throws ValidateException
- */
- protected function validate($data, $validate, $message = [], $batch = false, $callback = null)
- {
- if (is_array($validate)) {
- $v = Loader::validate();
- $v->rule($validate);
- } else {
- // 支持场景
- if (strpos($validate, '.')) {
- list($validate, $scene) = explode('.', $validate);
- }
-
- $v = Loader::validate($validate);
-
- !empty($scene) && $v->scene($scene);
- }
-
- // 批量验证
- if ($batch || $this->batchValidate) {
- $v->batch(true);
- }
-
- // 设置错误信息
- if (is_array($message)) {
- $v->message($message);
- }
-
- // 使用回调验证
- if ($callback && is_callable($callback)) {
- call_user_func_array($callback, [$v, &$data]);
- }
-
- if (!$v->check($data)) {
- if ($this->failException) {
- throw new ValidateException($v->getError());
- }
-
- return $v->getError();
- }
-
- return true;
- }
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Cookie.php b/digital_doctor_admin/thinkphp/library/think/Cookie.php
deleted file mode 100644
index 61b47cc..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Cookie.php
+++ /dev/null
@@ -1,268 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-class Cookie
-{
- /**
- * @var array cookie 设置参数
- */
- protected static $config = [
- 'prefix' => '', // cookie 名称前缀
- 'expire' => 0, // cookie 保存时间
- 'path' => '/', // cookie 保存路径
- 'domain' => '', // cookie 有效域名
- 'secure' => false, // cookie 启用安全传输
- 'httponly' => false, // httponly 设置
- 'setcookie' => true, // 是否使用 setcookie
- ];
-
- /**
- * @var bool 是否完成初始化了
- */
- protected static $init;
-
- /**
- * Cookie初始化
- * @access public
- * @param array $config 配置参数
- * @return void
- */
- public static function init(array $config = [])
- {
- if (empty($config)) {
- $config = Config::get('cookie');
- }
-
- self::$config = array_merge(self::$config, array_change_key_case($config));
-
- if (!empty(self::$config['httponly'])) {
- ini_set('session.cookie_httponly', 1);
- }
-
- self::$init = true;
- }
-
- /**
- * 设置或者获取 cookie 作用域(前缀)
- * @access public
- * @param string $prefix 前缀
- * @return string|
- */
- public static function prefix($prefix = '')
- {
- if (empty($prefix)) {
- return self::$config['prefix'];
- }
-
- return self::$config['prefix'] = $prefix;
- }
-
- /**
- * Cookie 设置、获取、删除
- * @access public
- * @param string $name cookie 名称
- * @param mixed $value cookie 值
- * @param mixed $option 可选参数 可能会是 null|integer|string
- * @return void
- */
- public static function set($name, $value = '', $option = null)
- {
- !isset(self::$init) && self::init();
-
- // 参数设置(会覆盖黙认设置)
- if (!is_null($option)) {
- if (is_numeric($option)) {
- $option = ['expire' => $option];
- } elseif (is_string($option)) {
- parse_str($option, $option);
- }
-
- $config = array_merge(self::$config, array_change_key_case($option));
- } else {
- $config = self::$config;
- }
-
- $name = $config['prefix'] . $name;
-
- // 设置 cookie
- if (is_array($value)) {
- array_walk_recursive($value, 'self::jsonFormatProtect', 'encode');
- $value = 'think:' . json_encode($value);
- }
-
- $expire = !empty($config['expire']) ?
- $_SERVER['REQUEST_TIME'] + intval($config['expire']) :
- 0;
-
- if ($config['setcookie']) {
- setcookie(
- $name, $value, $expire, $config['path'], $config['domain'],
- $config['secure'], $config['httponly']
- );
- }
-
- $_COOKIE[$name] = $value;
- }
-
- /**
- * 永久保存 Cookie 数据
- * @access public
- * @param string $name cookie 名称
- * @param mixed $value cookie 值
- * @param mixed $option 可选参数 可能会是 null|integer|string
- * @return void
- */
- public static function forever($name, $value = '', $option = null)
- {
- if (is_null($option) || is_numeric($option)) {
- $option = [];
- }
-
- $option['expire'] = 315360000;
-
- self::set($name, $value, $option);
- }
-
- /**
- * 判断是否有 Cookie 数据
- * @access public
- * @param string $name cookie 名称
- * @param string|null $prefix cookie 前缀
- * @return bool
- */
- public static function has($name, $prefix = null)
- {
- !isset(self::$init) && self::init();
-
- $prefix = !is_null($prefix) ? $prefix : self::$config['prefix'];
-
- return isset($_COOKIE[$prefix . $name]);
- }
-
- /**
- * 获取 Cookie 的值
- * @access public
- * @param string $name cookie 名称
- * @param string|null $prefix cookie 前缀
- * @return mixed
- */
- public static function get($name = '', $prefix = null)
- {
- !isset(self::$init) && self::init();
-
- $prefix = !is_null($prefix) ? $prefix : self::$config['prefix'];
- $key = $prefix . $name;
-
- if ('' == $name) {
- // 获取全部
- if ($prefix) {
- $value = [];
-
- foreach ($_COOKIE as $k => $val) {
- if (0 === strpos($k, $prefix)) {
- $value[$k] = $val;
- }
-
- }
- } else {
- $value = $_COOKIE;
- }
- } elseif (isset($_COOKIE[$key])) {
- $value = $_COOKIE[$key];
-
- if (0 === strpos($value, 'think:')) {
- $value = json_decode(substr($value, 6), true);
- array_walk_recursive($value, 'self::jsonFormatProtect', 'decode');
- }
- } else {
- $value = null;
- }
-
- return $value;
- }
-
- /**
- * 删除 Cookie
- * @access public
- * @param string $name cookie 名称
- * @param string|null $prefix cookie 前缀
- * @return void
- */
- public static function delete($name, $prefix = null)
- {
- !isset(self::$init) && self::init();
-
- $config = self::$config;
- $prefix = !is_null($prefix) ? $prefix : $config['prefix'];
- $name = $prefix . $name;
-
- if ($config['setcookie']) {
- setcookie(
- $name, '', $_SERVER['REQUEST_TIME'] - 3600, $config['path'],
- $config['domain'], $config['secure'], $config['httponly']
- );
- }
-
- // 删除指定 cookie
- unset($_COOKIE[$name]);
- }
-
- /**
- * 清除指定前缀的所有 cookie
- * @access public
- * @param string|null $prefix cookie 前缀
- * @return void
- */
- public static function clear($prefix = null)
- {
- if (empty($_COOKIE)) {
- return;
- }
-
- !isset(self::$init) && self::init();
-
- // 要删除的 cookie 前缀,不指定则删除 config 设置的指定前缀
- $config = self::$config;
- $prefix = !is_null($prefix) ? $prefix : $config['prefix'];
-
- if ($prefix) {
- foreach ($_COOKIE as $key => $val) {
- if (0 === strpos($key, $prefix)) {
- if ($config['setcookie']) {
- setcookie(
- $key, '', $_SERVER['REQUEST_TIME'] - 3600, $config['path'],
- $config['domain'], $config['secure'], $config['httponly']
- );
- }
-
- unset($_COOKIE[$key]);
- }
- }
- }
- }
-
- /**
- * json 转换时的格式保护
- * @access protected
- * @param mixed $val 要转换的值
- * @param string $key 键名
- * @param string $type 转换类别
- * @return void
- */
- protected static function jsonFormatProtect(&$val, $key, $type = 'encode')
- {
- if (!empty($val) && true !== $val) {
- $val = 'decode' == $type ? urldecode($val) : urlencode($val);
- }
- }
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Db.php b/digital_doctor_admin/thinkphp/library/think/Db.php
deleted file mode 100644
index c4b5f00..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Db.php
+++ /dev/null
@@ -1,180 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-use think\db\Connection;
-use think\db\Query;
-
-/**
- * Class Db
- * @package think
- * @method static Query table(string $table) 指定数据表(含前缀)
- * @method static Query name(string $name) 指定数据表(不含前缀)
- * @method static Query where(mixed $field, string $op = null, mixed $condition = null) 查询条件
- * @method static Query join(mixed $join, mixed $condition = null, string $type = 'INNER') JOIN查询
- * @method static Query union(mixed $union, boolean $all = false) UNION查询
- * @method static Query limit(mixed $offset, integer $length = null) 查询LIMIT
- * @method static Query order(mixed $field, string $order = null) 查询ORDER
- * @method static Query cache(mixed $key = null , integer $expire = null) 设置查询缓存
- * @method static mixed value(string $field) 获取某个字段的值
- * @method static array column(string $field, string $key = '') 获取某个列的值
- * @method static Query view(mixed $join, mixed $field = null, mixed $on = null, string $type = 'INNER') 视图查询
- * @method static mixed find(mixed $data = null) 查询单个记录
- * @method static mixed select(mixed $data = null) 查询多个记录
- * @method static integer insert(array $data, boolean $replace = false, boolean $getLastInsID = false, string $sequence = null) 插入一条记录
- * @method static integer insertGetId(array $data, boolean $replace = false, string $sequence = null) 插入一条记录并返回自增ID
- * @method static integer insertAll(array $dataSet) 插入多条记录
- * @method static integer update(array $data) 更新记录
- * @method static integer delete(mixed $data = null) 删除记录
- * @method static boolean chunk(integer $count, callable $callback, string $column = null) 分块获取数据
- * @method static mixed query(string $sql, array $bind = [], boolean $master = false, bool $pdo = false) SQL查询
- * @method static integer execute(string $sql, array $bind = [], boolean $fetch = false, boolean $getLastInsID = false, string $sequence = null) SQL执行
- * @method static Paginator paginate(integer $listRows = 15, mixed $simple = null, array $config = []) 分页查询
- * @method static mixed transaction(callable $callback) 执行数据库事务
- * @method static void startTrans() 启动事务
- * @method static void commit() 用于非自动提交状态下面的查询提交
- * @method static void rollback() 事务回滚
- * @method static boolean batchQuery(array $sqlArray) 批处理执行SQL语句
- * @method static string quote(string $str) SQL指令安全过滤
- * @method static string getLastInsID($sequence = null) 获取最近插入的ID
- */
-class Db
-{
- /**
- * @var Connection[] 数据库连接实例
- */
- private static $instance = [];
-
- /**
- * @var int 查询次数
- */
- public static $queryTimes = 0;
-
- /**
- * @var int 执行次数
- */
- public static $executeTimes = 0;
-
- /**
- * 数据库初始化,并取得数据库类实例
- * @access public
- * @param mixed $config 连接配置
- * @param bool|string $name 连接标识 true 强制重新连接
- * @return Connection
- * @throws Exception
- */
- public static function connect($config = [], $name = false)
- {
- if (false === $name) {
- $name = md5(serialize($config));
- }
-
- if (true === $name || !isset(self::$instance[$name])) {
- // 解析连接参数 支持数组和字符串
- $options = self::parseConfig($config);
-
- if (empty($options['type'])) {
- throw new \InvalidArgumentException('Undefined db type');
- }
-
- $class = false !== strpos($options['type'], '\\') ?
- $options['type'] :
- '\\think\\db\\connector\\' . ucwords($options['type']);
-
- // 记录初始化信息
- if (App::$debug) {
- Log::record('[ DB ] INIT ' . $options['type'], 'info');
- }
-
- if (true === $name) {
- $name = md5(serialize($config));
- }
-
- self::$instance[$name] = new $class($options);
- }
-
- return self::$instance[$name];
- }
-
- /**
- * 清除连接实例
- * @access public
- * @return void
- */
- public static function clear()
- {
- self::$instance = [];
- }
-
- /**
- * 数据库连接参数解析
- * @access private
- * @param mixed $config 连接参数
- * @return array
- */
- private static function parseConfig($config)
- {
- if (empty($config)) {
- $config = Config::get('database');
- } elseif (is_string($config) && false === strpos($config, '/')) {
- $config = Config::get($config); // 支持读取配置参数
- }
-
- return is_string($config) ? self::parseDsn($config) : $config;
- }
-
- /**
- * DSN 解析
- * 格式: mysql://username:passwd@localhost:3306/DbName?param1=val1¶m2=val2#utf8
- * @access private
- * @param string $dsnStr 数据库 DSN 字符串解析
- * @return array
- */
- private static function parseDsn($dsnStr)
- {
- $info = parse_url($dsnStr);
-
- if (!$info) {
- return [];
- }
-
- $dsn = [
- 'type' => $info['scheme'],
- 'username' => isset($info['user']) ? $info['user'] : '',
- 'password' => isset($info['pass']) ? $info['pass'] : '',
- 'hostname' => isset($info['host']) ? $info['host'] : '',
- 'hostport' => isset($info['port']) ? $info['port'] : '',
- 'database' => !empty($info['path']) ? ltrim($info['path'], '/') : '',
- 'charset' => isset($info['fragment']) ? $info['fragment'] : 'utf8',
- ];
-
- if (isset($info['query'])) {
- parse_str($info['query'], $dsn['params']);
- } else {
- $dsn['params'] = [];
- }
-
- return $dsn;
- }
-
- /**
- * 调用驱动类的方法
- * @access public
- * @param string $method 方法名
- * @param array $params 参数
- * @return mixed
- */
- public static function __callStatic($method, $params)
- {
- return call_user_func_array([self::connect(), $method], $params);
- }
-}
diff --git a/digital_doctor_admin/thinkphp/library/think/Debug.php b/digital_doctor_admin/thinkphp/library/think/Debug.php
deleted file mode 100644
index df48748..0000000
--- a/digital_doctor_admin/thinkphp/library/think/Debug.php
+++ /dev/null
@@ -1,252 +0,0 @@
-
-// +----------------------------------------------------------------------
-
-namespace think;
-
-use think\exception\ClassNotFoundException;
-use think\response\Redirect;
-
-class Debug
-{
- /**
- * @var array 区间时间信息
- */
- protected static $info = [];
-
- /**
- * @var array 区间内存信息
- */
- protected static $mem = [];
-
- /**
- * 记录时间(微秒)和内存使用情况
- * @access public
- * @param string $name 标记位置
- * @param mixed $value 标记值(留空则取当前 time 表示仅记录时间 否则同时记录时间和内存)
- * @return void
- */
- public static function remark($name, $value = '')
- {
- self::$info[$name] = is_float($value) ? $value : microtime(true);
-
- if ('time' != $value) {
- self::$mem['mem'][$name] = is_float($value) ? $value : memory_get_usage();
- self::$mem['peak'][$name] = memory_get_peak_usage();
- }
- }
-
- /**
- * 统计某个区间的时间(微秒)使用情况 返回值以秒为单位
- * @access public
- * @param string $start 开始标签
- * @param string $end 结束标签
- * @param integer $dec 小数位
- * @return string
- */
- public static function getRangeTime($start, $end, $dec = 6)
- {
- if (!isset(self::$info[$end])) {
- self::$info[$end] = microtime(true);
- }
-
- return number_format((self::$info[$end] - self::$info[$start]), $dec);
- }
-
- /**
- * 统计从开始到统计时的时间(微秒)使用情况 返回值以秒为单位
- * @access public
- * @param integer $dec 小数位
- * @return string
- */
- public static function getUseTime($dec = 6)
- {
- return number_format((microtime(true) - THINK_START_TIME), $dec);
- }
-
- /**
- * 获取当前访问的吞吐率情况
- * @access public
- * @return string
- */
- public static function getThroughputRate()
- {
- return number_format(1 / self::getUseTime(), 2) . 'req/s';
- }
-
- /**
- * 记录区间的内存使用情况
- * @access public
- * @param string $start 开始标签
- * @param string $end 结束标签
- * @param integer $dec 小数位
- * @return string
- */
- public static function getRangeMem($start, $end, $dec = 2)
- {
- if (!isset(self::$mem['mem'][$end])) {
- self::$mem['mem'][$end] = memory_get_usage();
- }
-
- $size = self::$mem['mem'][$end] - self::$mem['mem'][$start];
- $a = ['B', 'KB', 'MB', 'GB', 'TB'];
- $pos = 0;
-
- while ($size >= 1024) {
- $size /= 1024;
- $pos++;
- }
-
- return round($size, $dec) . " " . $a[$pos];
- }
-
- /**
- * 统计从开始到统计时的内存使用情况
- * @access public
- * @param integer $dec 小数位
- * @return string
- */
- public static function getUseMem($dec = 2)
- {
- $size = memory_get_usage() - THINK_START_MEM;
- $a = ['B', 'KB', 'MB', 'GB', 'TB'];
- $pos = 0;
-
- while ($size >= 1024) {
- $size /= 1024;
- $pos++;
- }
-
- return round($size, $dec) . " " . $a[$pos];
- }
-
- /**
- * 统计区间的内存峰值情况
- * @access public
- * @param string $start 开始标签
- * @param string $end 结束标签
- * @param integer $dec 小数位
- * @return string
- */
- public static function getMemPeak($start, $end, $dec = 2)
- {
- if (!isset(self::$mem['peak'][$end])) {
- self::$mem['peak'][$end] = memory_get_peak_usage();
- }
-
- $size = self::$mem['peak'][$end] - self::$mem['peak'][$start];
- $a = ['B', 'KB', 'MB', 'GB', 'TB'];
- $pos = 0;
-
- while ($size >= 1024) {
- $size /= 1024;
- $pos++;
- }
-
- return round($size, $dec) . " " . $a[$pos];
- }
-
- /**
- * 获取文件加载信息
- * @access public
- * @param bool $detail 是否显示详细
- * @return integer|array
- */
- public static function getFile($detail = false)
- {
- $files = get_included_files();
-
- if ($detail) {
- $info = [];
-
- foreach ($files as $file) {
- $info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )';
- }
-
- return $info;
- }
-
- return count($files);
- }
-
- /**
- * 浏览器友好的变量输出
- * @access public
- * @param mixed $var 变量
- * @param boolean $echo 是否输出(默认为 true,为 false 则返回输出字符串)
- * @param string|null $label 标签(默认为空)
- * @param integer $flags htmlspecialchars 的标志
- * @return null|string
- */
- public static function dump($var, $echo = true, $label = null, $flags = ENT_SUBSTITUTE)
- {
- $label = (null === $label) ? '' : rtrim($label) . ':';
-
- ob_start();
- var_dump($var);
- $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', ob_get_clean());
-
- if (IS_CLI) {
- $output = PHP_EOL . $label . $output . PHP_EOL;
- } else {
- if (!extension_loaded('xdebug')) {
- $output = htmlspecialchars($output, $flags);
- }
-
- $output = '' . $label . $output . '
';
- }
-
- if ($echo) {
- echo($output);
- return;
- }
-
- return $output;
- }
-
- /**
- * 调试信息注入到响应中
- * @access public
- * @param Response $response 响应实例
- * @param string $content 返回的字符串
- * @return void
- */
- public static function inject(Response $response, &$content)
- {
- $config = Config::get('trace');
- $type = isset($config['type']) ? $config['type'] : 'Html';
- $class = false !== strpos($type, '\\') ? $type : '\\think\\debug\\' . ucwords($type);
-
- unset($config['type']);
-
- if (!class_exists($class)) {
- throw new ClassNotFoundException('class not exists:' . $class, $class);
- }
-
- /** @var \think\debug\Console|\think\debug\Html $trace */
- $trace = new $class($config);
-
- if ($response instanceof Redirect) {
- // TODO 记录
- } else {
- $output = $trace->output($response, Log::getLog());
-
- if (is_string($output)) {
- // trace 调试信息注入
- $pos = strripos($content, '