├── .gitignore ├── .travis.yml ├── CONTRIBUTING.md ├── LICENSE.txt ├── README.md ├── application ├── .htaccess ├── Home │ └── Controller │ │ ├── Error.php │ │ └── Pages.php └── index │ └── controller │ └── Index.php ├── bin ├── build.php └── console ├── composer.json ├── config ├── bootstrap.php ├── build.php ├── command.php ├── common.php ├── config.php ├── convention.php ├── database.php ├── paths.php └── route.php └── public ├── .htaccess ├── favicon.ico ├── index.php ├── robots.txt ├── router.php └── static └── .gitignore /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | composer.lock 3 | *.log 4 | vendor/ 5 | .settings/ 6 | .buildpath 7 | .project -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | 3 | language: php 4 | 5 | services: 6 | - memcached 7 | - mongodb 8 | - mysql 9 | - postgresql 10 | - redis-server 11 | 12 | matrix: 13 | fast_finish: true 14 | include: 15 | - php: 5.4 16 | - php: 5.5 17 | - php: 5.6 18 | - php: 7.0 19 | - php: hhvm 20 | allow_failures: 21 | - php: hhvm 22 | 23 | cache: 24 | directories: 25 | - $HOME/.composer/cache 26 | 27 | before_install: 28 | - composer self-update 29 | - mysql -e "create database IF NOT EXISTS test;" -uroot 30 | - psql -c 'DROP DATABASE IF EXISTS test;' -U postgres 31 | - psql -c 'create database test;' -U postgres 32 | 33 | install: 34 | - ./thinkphp/tests/script/install.sh 35 | 36 | script: 37 | ## LINT 38 | - find thinkphp ! -path "thinkphp/vendor/*" -type f -name \*.php -exec php -l {} \; 39 | ## PHP_CodeSniffer 40 | - thinkphp/vendor/bin/phpcs --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 --standard=PSR2 --ignore="thinkphp/vendor/*" thinkphp 41 | ## PHP Copy/Paste Detector 42 | - thinkphp/vendor/bin/phpcpd --verbose --exclude vendor thinkphp || true 43 | ## PHPLOC 44 | - thinkphp/vendor/bin/phploc --exclude vendor thinkphp 45 | ## PHPUNIT 46 | - thinkphp/vendor/bin/phpunit --coverage-clover=coverage.xml --configuration=thinkphp/phpunit.xml 47 | 48 | after_success: 49 | - bash <(curl -s https://codecov.io/bash) 50 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 如何贡献我的源代码 2 | === 3 | 4 | 此文档介绍了 ThinkPHP 团队的组成以及运转机制,您提交的代码将给 ThinkPHP 项目带来什么好处,以及如何才能加入我们的行列。 5 | 6 | ## 通过 Github 贡献代码 7 | 8 | ThinkPHP 目前使用 Git 来控制程序版本,如果你想为 ThinkPHP 贡献源代码,请先大致了解 Git 的使用方法。我们目前把项目托管在 GitHub 上,任何 GitHub 用户都可以向我们贡献代码。 9 | 10 | 参与的方式很简单,`fork`一份 ThinkPHP 的代码到你的仓库中,修改后提交,并向我们发起`pull request`申请,我们会及时对代码进行审查并处理你的申请并。审查通过后,你的代码将被`merge`进我们的仓库中,这样你就会自动出现在贡献者名单里了,非常方便。 11 | 12 | 我们希望你贡献的代码符合: 13 | 14 | * ThinkPHP 的编码规范 15 | * 适当的注释,能让其他人读懂 16 | * 遵循 Apache2 开源协议 17 | 18 | **如果想要了解更多细节或有任何疑问,请继续阅读下面的内容** 19 | 20 | ### 注意事项 21 | 22 | * 本项目代码格式化标准选用 [**PSR-2**](http://www.kancloud.cn/thinkphp/php-fig-psr/3141); 23 | * 类名和类文件名遵循 [**PSR-4**](http://www.kancloud.cn/thinkphp/php-fig-psr/3144); 24 | * 对于 Issues 的处理,请使用诸如 `fix #xxx(Issue ID)` 的 commit title 直接关闭 issue。 25 | * 系统会自动在 PHP 5.4 5.5 5.6 7.0 和 HHVM 上测试修改,其中 HHVM 下的测试容许报错,请确保你的修改符合 PHP 5.4 ~ 5.6 和 PHP 7.0 的语法规范; 26 | * 管理员不会合并造成 CI faild 的修改,若出现 CI faild 请检查自己的源代码或修改相应的[单元测试文件](thinkphp/tests); 27 | 28 | ## GitHub Issue 29 | 30 | GitHub 提供了 Issue 功能,该功能可以用于: 31 | 32 | * 提出 bug 33 | * 提出功能改进 34 | * 反馈使用体验 35 | 36 | 该功能不应该用于: 37 | 38 | * 提出修改意见(涉及代码署名和修订追溯问题) 39 | * 不友善的言论 40 | 41 | ## 快速修改 42 | 43 | **GitHub 提供了快速编辑文件的功能** 44 | 45 | 1. 登录 GitHub 帐号; 46 | 2. 浏览项目文件,找到要进行修改的文件; 47 | 3. 点击右上角铅笔图标进行修改; 48 | 4. 填写 `Commit changes` 相关内容(Title 必填); 49 | 5. 提交修改,等待 CI 验证和管理员合并。 50 | 51 | **若您需要一次提交大量修改,请继续阅读下面的内容** 52 | 53 | ## 完整流程 54 | 55 | 1. `fork`本项目; 56 | 2. 克隆(`clone`)你 `fork` 的项目到本地; 57 | 3. 新建分支(`branch`)并检出(`checkout`)新分支; 58 | 4. 添加本项目到你的本地 git 仓库作为上游(`upstream`); 59 | 5. 进行修改,若你的修改包含方法或函数的增减,请记得修改[单元测试文件](thinkphp/tests); 60 | 6. 变基(衍合 `rebase`)你的分支到上游 master 分支; 61 | 7. `push` 你的本地仓库到 GitHub; 62 | 8. 提交 ``pull request`s`; 63 | 9. 等待 CI 验证(若不通过则重复 5~7,GitHub 会自动更新你的 ``pull request`s`); 64 | 10. 等待管理员处理,并及时 `rebase` 你的分支到上游 master 分支(若上游 master 分支有修改)。 65 | 66 | *若有必要,可以 `git push -f` 强行推送 rebase 后的分支到自己的 GitHub `fork`* 67 | 68 | ### 注意事项 69 | 70 | * 若对上述流程有任何不清楚的地方,请查阅 GIT 教程,如 [这个](http://backlogtool.com/git-guide/cn/); 71 | * 对于代码**不同方面**的修改,请在自己 `fork` 的项目中**创建不同的分支**(原因参见`完整流程`第9条备注部分); 72 | * 变基及交互式变基操作参见 [Git 交互式变基](http://pakchoi.me/2015/03/17/git-interactive-rebase/) 73 | 74 | ## 推荐资源 75 | 76 | ### 开发环境 77 | 78 | * XAMPP for Windows 5.5.x 79 | * WampServer (for Windows) 80 | * upupw Apache PHP5.4 ( for Windows) 81 | 82 | 或自行安装 83 | 84 | - Apache / Nginx 85 | - PHP 5.4 ~ 5.6 86 | - MySQL / MariaDB 87 | 88 | *Windows 用户推荐添加 PHP bin 目录到 PATH,方便使用 composer* 89 | 90 | *Linux 用户自行配置环境, Mac 用户推荐使用内嵌 Apache 配合 Homebrew 安装 PHP 和 MariaDB* 91 | 92 | ### 编辑器 93 | 94 | Sublime Text 3 + phpfmt 插件 95 | 96 | phpfmt 插件参数 97 | 98 | ```json 99 | { 100 | "enable_auto_align": true, 101 | "indent_with_space": true, 102 | "psr1_naming": true, 103 | "psr2": true, 104 | "version": 1 105 | } 106 | ``` 107 | 108 | 或其他 编辑器 / IDE 配合 PSR2 自动格式化工具 109 | 110 | ### Git GUI 111 | 112 | * SourceTree 113 | * GitHub Desktop 114 | 115 | 或其他 Git 图形界面客户端 116 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | 2 | ThinkPHP遵循Apache2开源协议发布,并提供免费使用。 3 | 版权所有Copyright © 2006-2016 by ThinkPHP (http://thinkphp.cn) 4 | All rights reserved。 5 | ThinkPHP® 商标和著作权所有者为上海顶想信息科技有限公司。 6 | 7 | Apache Licence是著名的非盈利开源组织Apache采用的协议。 8 | 该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, 9 | 允许代码修改,再作为开源或商业软件发布。需要满足 10 | 的条件: 11 | 1. 需要给代码的用户一份Apache Licence ; 12 | 2. 如果你修改了代码,需要在被修改的文件中说明; 13 | 3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 14 | 带有原来代码中的协议,商标,专利声明和其他原来作者规 15 | 定需要包含的说明; 16 | 4. 如果再发布的产品中包含一个Notice文件,则在Notice文 17 | 件中需要带有本协议内容。你可以在Notice中增加自己的 18 | 许可,但不可以表现为对Apache Licence构成更改。 19 | 具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 20 | 21 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24 | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25 | COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 27 | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 29 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 31 | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32 | POSSIBILITY OF SUCH DAMAGE. 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ThinkPHP Next Generation Web Application Template@dev 2 | =============== 3 | 4 | 为thinkng创建的应用模板 5 | 6 | 框架代码在这里[topthink/thinkng](https://github.com/top-think/thinkng) 7 | 8 | ## 安装 9 | 10 | - 首先安装composer,官方网站 [https://getcomposer.org/](https://getcomposer.org/) 11 | 12 | - 运行命令 13 | 14 | ``` 15 | composer create-project topthink/thinkng-webapp [app_name] --stability=dev 16 | ``` 17 | 18 | 如果你无法安装,那么你可能使用了composer的中国源 19 | 20 | ## 运行项目 21 | 22 | 进入public目录下执行 23 | 24 | ``` 25 | php -S 127.0.0.1:8080 26 | ``` 27 | 28 | 浏览器打开 http://127.0.0.1:8080 29 | 30 | 在一切ok的情况下你会看到hello world! 31 | 32 | 欢迎fork,欢迎提交 -------------------------------------------------------------------------------- /application/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /application/Home/Controller/Error.php: -------------------------------------------------------------------------------- 1 | name($cityName); 18 | } 19 | 20 | //注意 city方法 本身是 protected 方法 21 | protected function name($name) 22 | { 23 | //和$name这个城市相关的处理 24 | return '当前控制器名称' . $name; 25 | } 26 | 27 | //空方法测试/Home/xxx/xx 28 | public function _empty($name) 29 | { 30 | //把所有城市的操作解析到city方法 31 | return $this->methodname($name); 32 | } 33 | 34 | //注意 showCity方法 本身是 protected 方法 35 | protected function methodname($name) 36 | { 37 | //和$name这个城市相关的处理 38 | return '当前方法名称' . $name; 39 | } 40 | } -------------------------------------------------------------------------------- /application/Home/Controller/Pages.php: -------------------------------------------------------------------------------- 1 | showCity($name); 18 | } 19 | 20 | //注意 showCity方法 本身是 protected 方法 21 | protected function showCity($name) 22 | { 23 | //和$name这个城市相关的处理 24 | return '当前城市' . $name; 25 | } 26 | } -------------------------------------------------------------------------------- /application/index/controller/Index.php: -------------------------------------------------------------------------------- 1 | *{ padding: 0; margin: 0; } div{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }

:)

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

[ V5.0 版本由 七牛云 独家赞助发布 ]
'; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /bin/build.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | // $Id$ 12 | 13 | return [ 14 | // 生成运行时目录 15 | '__dir__' => ['runtime/cache', 'runtime/log', 'runtime/temp', 'runtime/template'], 16 | // 生成应用公共文件 17 | '__file__' => ['common.php', 'config.php', 'database.php'], 18 | 19 | // 定义demo模块的自动生成 (按照实际定义的文件名生成) 20 | 'demo' => [ 21 | '__file__' => ['common.php'], 22 | '__dir__' => ['behavior', 'controller', 'model', 'view'], 23 | 'controller' => ['Index', 'Test', 'UserType'], 24 | 'model' => ['User', 'UserType'], 25 | 'view' => ['index/index'], 26 | ], 27 | // 其他更多的模块定义 28 | ]; 29 | -------------------------------------------------------------------------------- /bin/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | 11 | // +---------------------------------------------------------------------- 12 | 13 | // 定义项目路径 14 | define('APP_PATH', './application/'); 15 | // 定义应用模式为console 16 | define('APP_MODE', 'console'); 17 | // 开启调试模式 18 | define('APP_DEBUG', true); 19 | // 关闭应用自动执行 20 | define('APP_AUTO_RUN', false); 21 | // 加载框架引导文件 22 | require './thinkphp/start.php'; 23 | // 实例化console 24 | $console = new \think\Console('Think Console', '0.1'); 25 | // 读取指令集 26 | if (is_file(APP_PATH . 'command' . EXT)) { 27 | $commands = include APP_PATH . 'command' . EXT; 28 | if (is_array($commands)) { 29 | foreach ($commands as $command) { 30 | if (class_exists($command) && is_subclass_of($command, "\\think\\console\\command\\Command")) { 31 | // 注册指令 32 | $console->add(new $command()); 33 | } 34 | } 35 | } 36 | } 37 | // 运行 38 | $console->run(); -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "topthink/thinkng-webapp", 3 | "description": "The next generation thinkphp skeleton application", 4 | "type": "project", 5 | "keywords": ["framework", "thinkphp", "ORM"], 6 | "homepage": "http://thinkphp.cn/", 7 | "license": "Apache-2.0", 8 | "authors": [ 9 | { 10 | "name": "liu21st", 11 | "email": "liu21st@gmail.com" 12 | }, 13 | { 14 | "name": "tao", 15 | "email": "taosikai@yeah.net" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=5.4.0", 20 | "topthink/thinkng": "dev-master@dev" 21 | }, 22 | "require-dev": { 23 | }, 24 | "autoload": { 25 | "psr-4": { 26 | "App\\": "./application", 27 | "app\\": "./application" 28 | } 29 | }, 30 | "config": { 31 | "bin-dir": "bin" 32 | }, 33 | "minimum-stability": "dev" 34 | } 35 | -------------------------------------------------------------------------------- /config/bootstrap.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | // $Id$ 12 | 13 | return [ 14 | // 生成运行时目录 15 | '__dir__' => ['runtime/cache', 'runtime/log', 'runtime/temp', 'runtime/template'], 16 | // 生成应用公共文件 17 | '__file__' => ['common.php', 'config.php', 'database.php'], 18 | 19 | // 定义demo模块的自动生成 (按照实际定义的文件名生成) 20 | 'demo' => [ 21 | '__file__' => ['common.php'], 22 | '__dir__' => ['behavior', 'controller', 'model', 'view'], 23 | 'controller' => ['Index', 'Test', 'UserType'], 24 | 'model' => ['User', 'UserType'], 25 | 'view' => ['index/index'], 26 | ], 27 | // 其他更多的模块定义 28 | ]; 29 | -------------------------------------------------------------------------------- /config/command.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | 12 | return []; -------------------------------------------------------------------------------- /config/common.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | // $Id$ 12 | 13 | return [ 14 | 'url_route_on' => true, 15 | 'log' => [ 16 | 'type' => 'trace', // 支持 socket trace file 17 | ], 18 | ]; 19 | -------------------------------------------------------------------------------- /config/convention.php: -------------------------------------------------------------------------------- 1 | '', 10 | // 注册的根命名空间 11 | 'root_namespace' => [], 12 | // 扩展配置文件 13 | 'extra_config_list' => ['database', 'route', 'validate', 'auto'], 14 | // 扩展函数文件 15 | 'extra_file_list' => [THINK_PATH . 'src/Util/helper' . EXT], 16 | // 默认输出类型 17 | 'default_return_type' => 'html', 18 | // 默认语言 19 | 'default_lang' => 'zh-cn', 20 | // response是否返回方式 21 | 'response_return' => false, 22 | // 默认AJAX 数据返回格式,可选JSON XML ... 23 | 'default_ajax_return' => 'JSON', 24 | // 默认JSONP格式返回的处理方法 25 | 'default_jsonp_handler' => 'jsonpReturn', 26 | // 默认JSONP处理方法 27 | 'var_jsonp_handler' => 'callback', 28 | // 默认时区 29 | 'default_timezone' => 'PRC', 30 | // 是否开启多语言 31 | 'lang_switch_on' => false, 32 | // 支持的多语言列表 33 | 'lang_list' => ['zh-cn'], 34 | // 语言变量 35 | 'lang_detect_var' => 'lang', 36 | // 语言cookie变量 37 | 'lang_cookie_var' => 'think_lang', 38 | // 默认全局过滤方法 用逗号分隔多个 39 | 'default_filter' => '', 40 | // 自动Response输出 41 | 'response_auto_output' => true, 42 | 43 | // +---------------------------------------------------------------------- 44 | // | 模块设置 45 | // +---------------------------------------------------------------------- 46 | 47 | // 默认模块名 48 | 'default_module' => 'Home', 49 | // 禁止访问模块 50 | 'deny_module_list' => [COMMON_MODULE, 'runtime'], 51 | // 默认控制器名 52 | 'default_controller' => 'Pages', 53 | // 默认操作名 54 | 'default_action' => 'hello', 55 | // 默认验证器 56 | 'default_validate' => '', 57 | // 默认的空控制器名 58 | 'empty_controller' => 'Error', 59 | // 操作方法后缀 60 | 'action_suffix' => '', 61 | 62 | // +---------------------------------------------------------------------- 63 | // | URL设置 64 | // +---------------------------------------------------------------------- 65 | 66 | // PATHINFO变量名 用于兼容模式 67 | 'var_pathinfo' => 's', 68 | // 兼容PATH_INFO获取 69 | 'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'], 70 | // pathinfo分隔符 71 | 'pathinfo_depr' => '/', 72 | // 获取当前页面地址的系统变量 默认为REQUEST_URI 73 | 'url_request_uri' => 'REQUEST_URI', 74 | // 基础URL路径 75 | 'base_url' => $_SERVER["SCRIPT_NAME"], 76 | // URL伪静态后缀 77 | 'url_html_suffix' => '.html', 78 | // URL普通方式参数 用于自动生成 79 | 'url_common_param' => false, 80 | //url禁止访问的后缀 81 | 'url_deny_suffix' => 'ico|png|gif|jpg', 82 | // 是否开启路由 83 | 'url_route_on' => true, 84 | // 是否强制使用路由 85 | 'url_route_must' => false, 86 | // URL模块映射 87 | 'url_module_map' => [], 88 | // 域名部署 89 | 'url_domain_deploy' => false, 90 | // 域名根,如.thinkphp.cn 91 | 'url_domain_root' => '', 92 | // 是否自动转换URL中的控制器名 93 | 'url_controller_convert' => true, 94 | // 是否自动转换URL中的操作名 95 | 'url_action_convert' => true, 96 | 97 | // +---------------------------------------------------------------------- 98 | // | 视图及模板设置 99 | // +---------------------------------------------------------------------- 100 | 101 | // 默认跳转页面对应的模板文件 102 | 'dispatch_success_tmpl' => LIB_PATH . 'Tpl' . DS . 'dispatch_jump.tpl', 103 | 'dispatch_error_tmpl' => LIB_PATH . 'Tpl' . DS . 'dispatch_jump.tpl', 104 | 105 | // +---------------------------------------------------------------------- 106 | // | 异常及错误设置 107 | // +---------------------------------------------------------------------- 108 | 109 | // 异常页面的模板文件 110 | 'exception_tmpl' => LIB_PATH . 'Tpl' . DS . 'think_exception.tpl', 111 | // 异常处理忽略的错误类型,支持PHP所有的错误级别常量,多个级别可以用|运算法 112 | // 参考:http://php.net/manual/en/errorfunc.constants.php 113 | 'exception_ignore_type' => 0, 114 | // 错误显示信息,非调试模式有效 115 | 'error_message' => '页面错误!请稍后再试~', 116 | // 错误定向页面 117 | 'error_page' => '', 118 | // 显示错误信息 119 | 'show_error_msg' => false, 120 | 121 | // +---------------------------------------------------------------------- 122 | // | 日志设置 123 | // +---------------------------------------------------------------------- 124 | 125 | 'log' => [ 126 | // 日志记录方式,支持 file socket trace sae 127 | 'type' => 'File', 128 | // 日志保存目录 129 | 'path' => LOG_PATH, 130 | ], 131 | 132 | // +---------------------------------------------------------------------- 133 | // | 缓存设置 134 | // +---------------------------------------------------------------------- 135 | 136 | 'cache' => [ 137 | // 驱动方式 138 | 'type' => 'File', 139 | // 缓存保存目录 140 | 'path' => CACHE_PATH, 141 | // 缓存前缀 142 | 'prefix' => '', 143 | // 缓存有效期 0表示永久缓存 144 | 'expire' => 0, 145 | ], 146 | 147 | // +---------------------------------------------------------------------- 148 | // | 会话设置 149 | // +---------------------------------------------------------------------- 150 | 151 | 'session' => [ 152 | 'id' => '', 153 | // SESSION_ID的提交变量,解决flash上传跨域 154 | 'var_session_id' => '', 155 | // SESSION 前缀 156 | 'prefix' => 'think', 157 | // 驱动方式 支持redis memcache memcached 158 | 'type' => '', 159 | // 是否自动开启 SESSION 160 | 'auto_start' => true, 161 | ], 162 | 163 | // +---------------------------------------------------------------------- 164 | // | 数据库设置 165 | // +---------------------------------------------------------------------- 166 | 167 | 'db_fields_strict' => true, 168 | 'db_attr_case' => \PDO::CASE_LOWER, 169 | 'database' => [ 170 | // 数据库类型 171 | 'type' => 'mysql', 172 | // 数据库连接DSN配置 173 | 'dsn' => '', 174 | // 服务器地址 175 | 'hostname' => 'localhost', 176 | // 数据库名 177 | 'database' => '', 178 | // 数据库用户名 179 | 'username' => 'root', 180 | // 数据库密码 181 | 'password' => '', 182 | // 数据库连接端口 183 | 'hostport' => '', 184 | // 数据库连接参数 185 | 'params' => [], 186 | // 数据库编码默认采用utf8 187 | 'charset' => 'utf8', 188 | // 数据库表前缀 189 | 'prefix' => '', 190 | // 数据库调试模式 191 | 'debug' => false, 192 | // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 193 | 'deploy' => 0, 194 | // 数据库读写是否分离 主从式有效 195 | 'rw_separate' => false, 196 | // 读写分离后 主服务器数量 197 | 'master_num' => 1, 198 | // 指定从服务器序号 199 | 'slave_no' => '', 200 | ], 201 | 202 | ]; 203 | -------------------------------------------------------------------------------- /config/database.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | // $Id$ 12 | 13 | return [ 14 | // 数据库类型 15 | 'type' => 'mysql', 16 | // 数据库连接DSN配置 17 | 'dsn' => '', 18 | // 服务器地址 19 | 'hostname' => '127.0.0.1', 20 | // 数据库名 21 | 'database' => '', 22 | // 数据库用户名 23 | 'username' => 'root', 24 | // 数据库密码 25 | 'password' => '', 26 | // 数据库连接端口 27 | 'hostport' => '', 28 | // 数据库连接参数 29 | 'params' => [], 30 | // 数据库编码默认采用utf8 31 | 'charset' => 'utf8', 32 | // 数据库表前缀 33 | 'prefix' => '', 34 | // 数据库调试模式 35 | 'debug' => APP_DEBUG, 36 | // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器) 37 | 'deploy' => 0, 38 | // 数据库读写是否分离 主从式有效 39 | 'rw_separate' => false, 40 | // 读写分离后 主服务器数量 41 | 'master_num' => 1, 42 | // 指定从服务器序号 43 | 'slave_no' => '', 44 | ]; 45 | -------------------------------------------------------------------------------- /config/paths.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | 12 | // 开始运行时间和内存使用 13 | define('START_TIME', microtime(true)); 14 | define('START_MEM', memory_get_usage()); 15 | // 版本信息 16 | define('THINK_VERSION', '5.0.0 RC2'); 17 | 18 | // 系统常量 19 | defined('DS') or define('DS', DIRECTORY_SEPARATOR); 20 | defined('THINK_PATH') or define('THINK_PATH', dirname(__FILE__) . DS); 21 | defined('LIB_PATH') or define('LIB_PATH', THINK_PATH . 'src' . DS); 22 | defined('EXTEND_PATH') or define('EXTEND_PATH', THINK_PATH . 'extend' . DS); 23 | defined('MODE_PATH') or define('MODE_PATH', LIB_PATH . 'mode' . DS); // 系统应用模式目录 24 | defined('CORE_PATH') or define('CORE_PATH', LIB_PATH . 'think' . DS); 25 | defined('TRAIT_PATH') or define('TRAIT_PATH', LIB_PATH . 'traits' . DS); 26 | defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']) . DS); 27 | defined('ROOT_PATH') or define('ROOT_PATH', dirname(APP_PATH) . DS); 28 | defined('APP_NAMESPACE') or define('APP_NAMESPACE', 'App'); 29 | defined('COMMON_MODULE') or define('COMMON_MODULE', 'Common'); 30 | defined('RUNTIME_PATH') or define('RUNTIME_PATH', ROOT_PATH . 'runtime' . DS); 31 | defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH . 'log' . DS); 32 | defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH . 'cache' . DS); 33 | defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH . 'temp' . DS); 34 | defined('VENDOR_PATH') or define('VENDOR_PATH', THINK_PATH . 'vendor' . DS); 35 | defined('EXT') or define('EXT', '.php'); 36 | defined('MODEL_LAYER') or define('MODEL_LAYER', 'model'); 37 | defined('VIEW_LAYER') or define('VIEW_LAYER', 'view'); 38 | defined('CONTROLLER_LAYER') or define('CONTROLLER_LAYER', 'controller'); 39 | defined('VALIDATE_LAYER') or define('VALIDATE_LAYER', 'validate'); 40 | defined('APP_MULTI_MODULE') or define('APP_MULTI_MODULE', true); // 是否多模块 41 | defined('APP_HOOK') or define('APP_HOOK', false); // 是否开启HOOK 42 | defined('ENV_PREFIX') or define('ENV_PREFIX', 'PHP_'); // 环境变量的配置前缀 43 | defined('IS_API') or define('IS_API', false); // 是否API接口 44 | defined('APP_AUTO_RUN') or define('APP_AUTO_RUN', true); // 是否自动运行 45 | defined('APP_ROUTE_ON') or define('APP_ROUTE_ON', true); // 是否允许路由 46 | defined('APP_ROUTE_MUST') or define('APP_ROUTE_MUST', true); // 是否严格检查路由 47 | defined('CLASS_APPEND_SUFFIX') or define('CLASS_APPEND_SUFFIX', false); // 是否追加类名后缀 48 | // 应用模式 默认为普通模式 49 | defined('APP_MODE') or define('APP_MODE', function_exists('saeAutoLoader') ? 'sae' : 'common'); 50 | 51 | // 环境常量 52 | define('IS_CGI', strpos(PHP_SAPI, 'cgi') === 0 ? 1 : 0); 53 | define('IS_WIN', strstr(PHP_OS, 'WIN') ? 1 : 0); 54 | define('IS_MAC', strstr(PHP_OS, 'Darwin') ? 1 : 0); 55 | define('IS_CLI', PHP_SAPI == 'cli' ? 1 : 0); 56 | define('IS_AJAX', (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false); 57 | define('NOW_TIME', $_SERVER['REQUEST_TIME']); 58 | define('REQUEST_METHOD', IS_CLI ? 'GET' : $_SERVER['REQUEST_METHOD']); 59 | define('IS_GET', REQUEST_METHOD == 'GET' ? true : false); 60 | define('IS_POST', REQUEST_METHOD == 'POST' ? true : false); 61 | define('IS_PUT', REQUEST_METHOD == 'PUT' ? true : false); 62 | define('IS_DELETE', REQUEST_METHOD == 'DELETE' ? true : false); 63 | -------------------------------------------------------------------------------- /config/route.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | // $Id$ 12 | 13 | return [ 14 | '__pattern__' => [ 15 | 'name' => '\w+', 16 | ], 17 | '[hello]' => [ 18 | ':id' => ['index/hello', ['method' => 'get'], ['id' => '\d+']], 19 | ':name' => ['index/hello', ['method' => 'post']], 20 | ], 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | Options +FollowSymlinks 3 | RewriteEngine On 4 | 5 | RewriteCond %{REQUEST_FILENAME} !-d 6 | RewriteCond %{REQUEST_FILENAME} !-f 7 | RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 8 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/top-think/thinkng-webapp/0891afb467263c33a3a20f27a49e50cb67dc43b6/public/favicon.ico -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | 12 | // [ 应用入口文件 ] 13 | 14 | // 定义应用目录 15 | define('APP_PATH', __DIR__ . '/../application/'); 16 | // 开启调试模式 17 | define('APP_DEBUG', true); 18 | // 加载框架引导文件 19 | include __DIR__ . '/../config/bootstrap.php'; 20 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/router.php: -------------------------------------------------------------------------------- 1 | 10 | // +---------------------------------------------------------------------- 11 | // $Id$ 12 | 13 | if (file_exists($_SERVER["DOCUMENT_ROOT"] . $_SERVER["REQUEST_URI"])) { 14 | return false; 15 | } else { 16 | require "index.php"; 17 | } -------------------------------------------------------------------------------- /public/static/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore --------------------------------------------------------------------------------