配置文件是在應用初始化的時候,加載進來的。
## 加載環境變量配置文件和慣例配置文件
在App的initialize的方法中進行加載,加載環境變量的配置文件,并獲取配置中配置的配置文件的后綴名。
```
// 加載配置文件
if(is_file($this->rootpath . '.env')) {
$this->env->load($this->rootpath . '.env');
}
// 獲取配置文件的后綴,默認是.php文件
$this->configExt = $this->env->get('config_ext', '.php');
```
## 加載應用配置和模塊配置
在App的init方法中加載應用的配置和模塊的配置
```
// 自動讀取模塊配置文件
if(is_dir($path . 'config')) {
// 模塊目錄下的config目錄
$dir = $path . 'config' . DIRECTORY_SEPARATOR;
}else if(is_dir($this->configPath .$module )) {
// config目錄下的模塊目錄
$dir = $this->configPath . $module;
}
```
然后列出配置文件目錄下面的所有配置文件,更加配置文件的后綴,將文件的內容加載到Config類中
```
// scandir函數是列出目錄下面的所有文件
$files = isset($dir) ? scandir($dir) : [];
foreach ($files as $file) {
// 判斷符合條件的配置文件后綴,然后進行加載
if ('.' . pathinfo($file, PATHINFO_EXTENSION) === $this->configExt) {
$this->config->load($dir . $file, pathinfo($file, PATHINFO_FILENAME));
}
}
```
最終加載配置文件是在Config類的loadFile方法中完成的。通過Config類的set方法,將以數組的形式把配置文件中的配置項合并到Config類的config的屬性中。因為tp支持不同類型的配置文件,所以這里使用了工程模式,將不同類型的配置文件中的配置項轉換成數組的形式,提供給set方法。
```
$name = strtolower($name);
$type = pathinfo($file, PATHINFO_EXTENSION);
if ('php' == $type) {
return $this->set(include $file, $name);
} elseif ('yaml' == $type && function_exists('yaml_parse_file')) {
return $this->set(yaml_parse_file($file), $name);
}
return $this->parse($file, $type, $name);
```
Config類的set方法其實就是將配置文件中的配置項合并到config的屬性中。