[TOC]
## 简介
在本节里,我们完成 ThinkBBS 的项目配置和数据库配置。
## 需求分解
在本节里,我们主要完成项目的应用配置(应用名称、应用地址和调试模式)和数据库连接配置。
遵循 [开发规范](../c1_base/01060_开发规范.md) ,我们使用 `env()` 和 `config()` 来实现配置信息的设置和读取。
## 配置文件存储位置
ThinkPHP 项目配置包括 **项目配置** 和 **应用配置**。遵循 [开发规范](../c1_base/01060_开发规范.md) , **项目配置** 存储在项目 `config` 目录,**应用配置* 存储在应用的 `config` 子目录, 如 `app/index/config`。
>[warning] 按照官方文档里的 [配置](https://www.kancloud.cn/manual/thinkphp6_0/1037484) 说明,
> ThinkPHP 项目的配置相当灵活,但在本教程里我们将遵循本教程的 [开发规范](../c1_base/01060_开发规范.md),大家以后可以根据自己或公司开发习惯按照框架支持的格式制定自己的开发规范,但请大家在学习本教程过程中严格遵循本书的开发规范。
>
> 此外,大家在设置项目配置信息时还需要注意:
>
> 1. 配置文件是按以下 **从右到左** 优先顺序加载:惯例配置->项目配置->应用配置;
> 2. 配置参数 **区分大小写**。
## 配置文件
一定注意了,ThinkPHP6.0 **没有** config.php 配置文件,默认配置都在 app.php 配置文件,并且配置参数区分大小写。下面是配置文件的简单说明:
| 文件名称 | 配置类型 |
| -------- | -------- |
app.php|应用配置
cache.php|控制台配置
console.php|缓存配置
cookie.php|Cookie配置
database.php|数据库配置
filesystem.php|文件磁盘配置
lang.php|多语言配置
log.php|日志配置
middleware.php|中间件配置
route.php|URL和路由配置
session.php|Session配置
trace.php|Trace配置
view.php|视图配置
## 访问配置值
你可以在项目里任何位置使用助手函数 `config` 或 Config 类的 `get` 方法来访问配置值。配置值的访问可以使用「点」语法,这其中包含了要访问的 **文件名称** 和 **选项** 的名称。
```php
// 使用助手函数 config
// 读取 app.php 配置文件里的默认时区
$timezone = config('app.default_timezone');
// 读取所有 app 配置参数
$app = config('app');
```
或:
```php
// 使用 Config 类
use think\facade\Config;
// 读取 app.php 配置文件里的默认时区
$timezone = Config::get('app.default_timezone');
// 读取所有 app 配置参数
$app = Config::get('app');
```
## 设置环境变量
很多开发人员最喜欢直接在配置文件里修改项目配置参数,但当在开发过程中使用 Git 、SVN 或其它工具控制代码版本时由于团队内不同开发人员或不同部署环境时的参数配置值不同,直接修改配置文件里的参数值很容易造成代码冲突。所以,我们通常是使用 `.env` 来存储环境变量值。
使用 `.env` 设置配置信息被称为 [环境变量定义](https://www.kancloud.cn/manual/thinkphp6_0/1037484) , 文件中的配置参数定义采用 `ini` 格式。
当项目生成结束后,框架会在根目录生成一个名为 `.example.env` 的示例配置文件,所以我们复制该文件来创建本地的 `.env` 文件:
```shell
$ cp .example.env .env
```
然后,把新创建的 `.env` 改成以下内容:
*.env*
```
APP_DEBUG = true
[APP]
HOST=bbs.test
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = think_bbs
USERNAME = homestead
PASSWORD = secret
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
PREFIX = bbs_
[LANG]
default_lang = zh-cn
```
同时,为了方便其他人部署项目时创建 `.env` 文件,我们把新增配置项也添加到 `.example.env` 文件里:
*.example.env*
```
APP_DEBUG = false
[APP]
HOST=bbs.test
DEFAULT_TIMEZONE = Asia/Shanghai
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = username
PASSWORD = password
HOSTPORT = 3306
CHARSET = utf8
DEBUG = true
PREFIX = bbs_
[LANG]
default_lang = zh-cn
```
### 代码解读
- `APP_DEBUG` 和其它配置项不同,它不属于任何「节」,该参数是用来设置是否开启 [调试模式](https://www.kancloud.cn/manual/thinkphp6_0/1037618),当值为 `true` 时我们可以查看访问页面的 [Trace调试信息](https://www.kancloud.cn/manual/thinkphp6_0/1037619) 。在这里我们遵循官方建议,**在开发阶段始终开启调试模式** 。
## 调整配置信息
接下来,我们在配置文件里使用以上设置的环境变量:
*config/app.php*
```php
<?php
use think\facade\Env;
return [
// 应用地址
'app_host' => Env::get('app.host', ''),
.
.
.
// 默认时区
'default_timezone' => Env::get('app.default_timezone', 'Asia/Shanghai'),
.
.
.
];
```
因为框架生成的 `config/database.php` 里的数据库连接本身就是读取的环境变量,所以不需要进行任何修改。
*config/database.php*
```php
use think\facade\Env;
return [
.
.
.
// 数据库连接配置信息
'connections' => [
'mysql' => [
// 数据库类型
'type' => Env::get('database.type', 'mysql'),
// 服务器地址
'hostname' => Env::get('database.hostname', '127.0.0.1'),
// 数据库名
'database' => Env::get('database.database', ''),
// 用户名
'username' => Env::get('database.username', 'root'),
// 密码
'password' => Env::get('database.password', ''),
// 端口
'hostport' => Env::get('database.hostport', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => Env::get('database.charset', 'utf8'),
// 数据表前缀
'prefix' => Env::get('database.prefix', ''),
.
.
.
],
],
];
```
因为在本项目里,我们不希望用户通过 URL 访问 **共用应用(common)** 里的内容,所以我们把该应用添加到禁止访问应用列表里。**因为该设置和本地配置无关,所以我们直接在配置文件里进行修改**。
*config/app.php*
```php
use think\facade\Env;
return [
.
.
.
// 禁止URL访问的应用列表(自动多应用模式有效)
'deny_app_list' => ['common'],
.
.
.
];
```
## Git 代码版本控制
下面把代码纳入到版本管理:
```shell
$ git add -A
$ git commit -m "修改配置信息"
```
由于在根目录 `.gitignore` 文件的忽略规则有 *.env* 这一条,所以大家不必担心执行 `git add -A` 命令时把 `.env` 文件纳入到版本控制里。
- 第一章 基础信息
- 序言
- 关于作者
- PHP和ThinkPHP
- 如何正确阅读本书
- 写作约定
- 开发规范
- 章节体例
- 本书源码
- 第二章 舞台布置
- 开发环境
- 产品分解
- Git和GitHub
- 创建项目
- 数据库视图管理工具
- 统一代码风格
- 目录结构
- 配置信息
- 后台应用搭建
- 助手函数
- 前台布局模板
- 基础控制器
- 小结
- 第三章 注册登录
- 数据迁移
- 表单提交
- 表单验证
- 模型验证
- 短信提供商
- 发送短信
- 手机验证
- 注册提醒
- 登录与退出
- 重置密码
- 数据填充
- 小结
- 第四章 用户相关
- 个人中心
- 编辑个人资料
- 上传图片
- 上传头像
- 显示头像
- 限制头像分辨率
- 裁剪头像
- 显示注册时间
- 授权访问
- 小结
- 第五章 帖子列表
- 话题分类
- 话题模型
- 话题列表
- 性能优化
- 分类话题列表
- 话题列表排序
- 用户发布的话题
- 分页器美化
- 小结
- 第六章_帖子CURD
- 创建话题
- 生成摘要
- 编辑器优化
- 上传图片
- 显示话题
- 编辑话题
- 删除话题
- 小结
- 第七章 帖子回复
- 回复模型
- 回复列表
- 发表回复
- 删除回复
- XSS 安全漏洞
- 小结
- 第八章 角色权限和管理后台
- 多角色用户权限
- 用户管理
- 话题管理
- 回复管理
- 小结
- 第九章 杂项
- 边栏活跃用户
- 用户最后登录时间
- 边栏资源推荐
- 站点首页
- 小结
- 第十章 总结
- 全书总结
- 附录
- 浅谈ThinkPHP6.0 路由