## 配置目錄
### 單應用模式
對于單應用模式來說,配置文件和目錄很簡單,根目錄下的`config`目錄下面就是所有的配置文件。每個配置文件對應不同的組件,當然你也可以增加自定義的配置文件。
```
├─config(配置目錄)
│ ├─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`類的`load`方法手動加載,例如:
```
// 加載config/extra/config.php 配置文件 讀取到extra
\think\facade\Config::load('extra/config', 'extra');
```
### 多應用模式
在多應用模式下,配置分為全局配置和應用配置。
* **全局配置**:`config`目錄下面的文件就是項目的全局配置文件,對所有應用有效。
* **應用配置**:每個應用可以有獨立配置文件,相同的配置參數會覆蓋全局配置。
~~~
├─app(應用目錄)
│ ├─app1 (應用1)
│ │ └─config(應用配置)
│ │ ├─app.php 應用配置
│ │ ├─cache.php 緩存配置
│ │ ├─cookie.php Cookie配置
│ │ ├─database.php 數據庫配置
│ │ ├─lang.php 多語言配置
│ │ ├─log.php 日志配置
│ │ ├─route.php URL和路由配置
│ │ ├─session.php Session配置
│ │ ├─view.php 視圖及模板引擎配置
│ │ ├─trace.php Trace配置
│ │ └─ ... 更多配置文件
│ │
│ └─ app2... (更多應用)
│
├─config(全局配置)
│ ├─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 視圖配置
│ └─ ... 更多配置文件
│
~~~
## 配置定義
可以直接在相應的全局或應用配置文件中修改或者增加配置參數,如果你要增加額外的配置文件,直接放入配置目錄即可(文件名小寫)。
>[danger] 除了一級配置外,配置參數名嚴格區分大小寫,建議是使用小寫定義配置參數的規范。
由于架構設計原因,下面的配置只能在環境變量中修改。
| 配置參數 | 描述 |
| --- | --- |
| app_debug | 應用調試模式 |
| config\_ext | 配置文件后綴 |
### 環境變量定義
可以在應用的根目錄下定義一個特殊的`.env`環境變量文件,用于在開發過程中模擬環境變量配置(該文件建議在服務器部署的時候忽略),`.env`文件中的配置參數定義格式采用`ini`方式,例如:
~~~
APP_DEBUG = true
~~~
> 默認安裝后的根目錄有一個`.example.env`環境變量示例文件,你可以直接改成`.env`文件后進行修改。
>[danger] 如果你的部署環境單獨配置了環境變量( 環境變量的前綴使用`PHP_`),那么請刪除`.env`配置文件,避免沖突。
環境變量配置的參數會全部轉換為大寫,值為 `off`,`no` 和 `false` 等效于 布爾值`false`,值為 `yes` 、`on`和 `true` 等效于 布爾值的`true`。
注意,環境變量不支持數組參數,如果需要使用數組參數可以,可以使用
~~~
[DATABASE]
USERNAME = root
PASSWORD = 123456
~~~
如果要設置一個沒有鍵值的數組參數,可以使用
```
PATHINFO_PATH[] = ORIG_PATH_INFO
PATHINFO_PATH[] = REDIRECT_PATH_INFO
PATHINFO_PATH[] = REDIRECT_URL
```
獲取環境變量的值可以使用下面的方式獲取:
~~~
Env::get('database.username');
Env::get('database.password');
Env::get('PATHINFO_PATH');
~~~
要使用`Env`類,必須先引入`think\facade\Env`。
>[danger] 環境變量的獲取不區分大小寫
可以支持默認值,例如:
~~~
// 獲取環境變量 如果不存在則使用默認值root
Env::get('database.username', 'root');
~~~
可以直接在配置文件中使用環境變量進行本地環境和服務器的自動配置,例如:
~~~
return [
'hostname' => Env::get('hostname','127.0.0.1'),
];
~~~
### 多環境變量配置支持
`V6.0.8+`版本開始,可以支持定義多個環境變量配置文件,配置文件命名規范為
```
.env.example
.env.testing
.env.develop
```
然后,需要在入口文件中指定部署使用的環境變量名稱:
```
// 執行HTTP應用并響應
$http = (new App())->setEnvName('develop')->http;
$response = $http->run();
$response->send();
$http->end($response);
```
或者你可以繼承`App`類 然后重載`loadEnv`方法實現 動態切換環境變量配置。
### 其它配置格式支持
默認的配置文件都是PHP數組方式,如果你需要使用其它格式的配置文件,你可以通過改變`CONFIG_EXT`環境變量的方式來更改配置類型。
在應用根目錄的`.env`或者系統環境變量中設置
~~~
CONFIG_EXT=".ini"
~~~
支持的配置類型包括`.ini`、`.xml`、`.json` 、`.yaml`和 `.php` 在內的格式支持,配置后全局或應用配置必須統一使用相同的配置類型。
## 配置獲取
要使用`Config`類,首先需要在你的類文件中引入
~~~
use think\facade\Config;
~~~
然后就可以使用下面的方法讀取某個配置參數的值:
讀取一級配置的所有參數(每個配置文件都是獨立的一級配置)
```
Config::get('app');
Config::get('route');
```
讀取單個配置參數
```
Config::get('app.app_name');
Config::get('route.url_domain_root');
```
讀取數組配置(理論上支持無限級配置參數讀取)
```
Config::get('database.default.host');
```
判斷是否存在某個設置參數:
~~~
Config::has('template');
Config::has('route.route_rule_merge');
~~~
## 參數批量設置
`Config`類不再支持動態設置某個配置參數,但可以支持批量設置更新配置參數。
```
// 批量設置參數
Config::set(['name1' => 'value1', 'name2' => 'value2'], 'config');
// 獲取配置
Config::get('config');
```
## 系統配置文件
下面系統自帶的配置文件列表及其作用:
| 配置文件名 | 描述 |
| --- | --- |
| 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`目錄下面的相關文件內容。
>[danger] 如果是多應用模式的話配置文件可能同時存在全局和應用配置文件兩個同名文件
## 使用`Yaconf`定義
可以支持使用`Yaconf`統一定義配置,但不支持動態設置。
>[danger] 安裝了`yaconf`擴展之后,項目里面的配置文件不再有效。而且不再區分全局和應用配置。
首先需要安裝`topthink/think-yaconf`擴展,
```
composer require topthink/think-yaconf
```
然后在`app`目錄下的`provider.php`文件中添加:
```
'think\Config' => 'think\Yaconf',
```
使用`setYaconf`方法指定`Yaconf`使用的獨立配置文件,例如:
~~~
// 建議在應用的公共函數文件中進行設置
think\facade\Config::setYaconf('thinkphp');
~~~
設置后,你只需要在`thinkphp.ini`一個文件里進行項目的配置,而無需分開多個文件,避免和其它項目沖突。
> 關于`Yaconf`的安裝和配置用法可以[參考這里](http://www.laruence.com/2015/06/12/3051.html)。
- 序言
- 基礎
- 安裝
- 開發規范
- 目錄結構
- 配置
- 架構
- 請求流程
- 架構總覽
- 入口文件
- 多應用模式
- URL訪問
- 容器和依賴注入
- 服務
- 門面
- 中間件
- 事件
- 路由
- 路由定義
- 變量規則
- 路由地址
- 路由參數
- 路由中間件
- 路由分組
- 資源路由
- 注解路由
- 路由綁定
- 域名路由
- MISS路由
- 跨域請求
- URL生成
- 控制器
- 控制器定義
- 基礎控制器
- 空控制器
- 資源控制器
- 控制器中間件
- 請求
- 請求對象
- 請求信息
- 輸入變量
- 請求類型
- HTTP頭信息
- 偽靜態
- 參數綁定
- 請求緩存
- 響應
- 響應輸出
- 響應參數
- 重定向
- 文件下載
- 數據庫
- 連接數據庫
- 分布式數據庫
- 查詢構造器
- 查詢數據
- 添加數據
- 更新數據
- 刪除數據
- 查詢表達式
- 鏈式操作
- where
- table
- alias
- field
- strict
- limit
- page
- order
- group
- having
- join
- union
- distinct
- lock
- cache
- cacheAlways
- comment
- fetchSql
- force
- partition
- failException
- sequence
- replace
- extra
- duplicate
- procedure
- 聚合查詢
- 分頁查詢
- 時間查詢
- 高級查詢
- 視圖查詢
- JSON字段
- 子查詢
- 原生查詢
- 獲取查詢參數
- 查詢事件
- 獲取器
- 事務操作
- 存儲過程
- 數據集
- 數據庫驅動
- 模型
- 定義
- 模型字段
- 新增
- 更新
- 刪除
- 查詢
- 查詢范圍
- JSON字段
- 獲取器
- 修改器
- 搜索器
- 數據集
- 自動時間戳
- 只讀字段
- 軟刪除
- 類型轉換
- 模型輸出
- 模型事件
- 模型關聯
- 一對一關聯
- 一對多關聯
- 遠程一對多
- 遠程一對一
- 多對多關聯
- 多態關聯
- 關聯預載入
- 關聯統計
- 關聯輸出
- 虛擬模型
- 視圖
- 模板變量
- 視圖過濾
- 模板渲染
- 模板引擎
- 視圖驅動
- 錯誤和日志
- 異常處理
- 日志處理
- 調試
- 調試模式
- Trace調試
- SQL調試
- 變量調試
- 遠程調試
- 驗證
- 驗證器
- 驗證規則
- 錯誤信息
- 驗證場景
- 路由驗證
- 內置規則
- 表單令牌
- 注解驗證
- 雜項
- 緩存
- Session
- Cookie
- 多語言
- 上傳
- 命令行
- 啟動內置服務器
- 查看版本
- 自動生成應用目錄
- 創建類庫文件
- 清除緩存文件
- 生成數據表字段緩存
- 生成路由映射緩存
- 輸出路由定義
- 自定義指令
- Debug輸出級別
- 擴展庫
- 數據庫遷移工具
- Workerman
- think助手工具庫
- 驗證碼
- Swoole
- 附錄
- 助手函數
- 升級指導
- 更新日志