# 配置
## 配置文件說明
默認情況下,項目里會有以下幾個配置文件:
```bash
$ tree ./config/
./Config/
├── app.php
├── dbs.php
├── di.php
└── sys.php
```
其中app.php為項目應用配置;dbs.php為分布式存儲的數據庫配置;sys.php為不同環境下的系統配置。這三個文件都是用于存放配置信息,可通過```\PhalApi\DI()->config```進行讀取。
值得注意的是,```./config/di.php```文件則屬于依賴注入配置文件,用于配置需在```\PhalApi\DI()```容器中注冊的服務資源。
## 配置的簡單讀取
默認已注冊配置組件服務,名稱是```\PhalApi\DI()->config```。
```php
// 配置
$di->config = new FileConfig(API_ROOT . '/config');
```
假設app.php配置文件里有:
```php
return array(
'version' => '1.1.1',
'email' => array(
'address' => 'chanzonghuang@gmail.com',
);
);
```
可以分別這樣根據需要獲取配置:
```php
// app.php里面的全部配置
\PhalApi\DI()->config->get('app'); //返回:array( ... ... )
// app.php里面的單個配置
\PhalApi\DI()->config->get('app.version'); //返回:1.1.1
// app.php里面的多級配置
\PhalApi\DI()->config->get('app.email.address'); //返回:'chanzonghuang@gmail.com'
```
其他配置文件的讀取類似,你也可以根據需要添加新的配置文件。
## 讀取失敗與默認值
當一個配置不存在時,返回NULL。例如:
```php
\PhalApi\DI()->config->get('app.not_found'); //返回:NULL
```
當需要指定默認值時,可通過第二個參數指定。例如:
```php
\PhalApi\DI()->config->get('app.not_found', 404); //返回:404
```
## 使用Yaconf擴展快速讀取配置
Yaconf擴展需要PHP 7及以上版本,并且需要先安裝Yaconf擴展。
> **溫馨提示:**Yaconf擴展的安裝請參考[laruence/yaconf](https://github.com/laruence/yaconf)。
安裝部署完成后,先重新注冊```\PhalApi\DI()->config```:
```php
// 配置
$di->config = new PhalApi\Config\YaconfConfig();
```
然后,便和正常的配置一樣使用。
```
// 相當于Yaconf::get("foo")
\PhalApi\DI()->config->get('foo');
//相當于Yaconf::has("foo")
\PhalApi\DI()->config->has('foo');
```
需要注意的是,使用Yaconf擴展與默認的文件配置的區別的是,配置文件的目錄路徑以及配置文件的格式。當然也可以把Yaconf擴展的配置目錄路徑設置到PhalApi的配置目錄./config。
## 擴展:其他配置讀取方式
如果需要使用其他方式讀取配置,可根據實情需要,實現[PhalApi\Config](https://github.com/phalapi/kernal/blob/master/src/Config.php)接口,然后在```./config/di.php```文件重新注冊```\PhalApi\DI()->config```即可。
例如數據庫配置,這樣可以支持不發布代碼的情況下進行配置更改。