├── .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
--------------------------------------------------------------------------------