[TOC]
## 簡介
在本節里,我們完成 ThinkBBS 的項目配置和數據庫配置。
## 需求分解
在本節里,我們主要完成項目的應用配置(應用名稱、應用地址和調試模式)和數據庫連接配置。
遵循 [開發規范](../c1_base/01060_開發規范.md) ,我們使用 `env()` 和 `config()` 來實現配置信息的設置和讀取。
## 配置文件存儲位置
ThinkPHP 項目配置包括 **項目配置** 和 **應用配置**。遵循 [開發規范](../c1_base/01060_開發規范.md) , **項目配置** 存儲在項目 `config` 目錄,**應用配置* 存儲在應用的 `config` 子目錄, 如 `app/index/config`。
>[warning] 按照官方文檔里的 [配置](http://www.hmoore.net/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` 設置配置信息被稱為 [環境變量定義](http://www.hmoore.net/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` 和其它配置項不同,它不屬于任何「節」,該參數是用來設置是否開啟 [調試模式](http://www.hmoore.net/manual/thinkphp6_0/1037618),當值為 `true` 時我們可以查看訪問頁面的 [Trace調試信息](http://www.hmoore.net/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 路由