企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
配置文件是在应用初始化的时候,加载进来的。 ## 加载环境变量配置文件和惯例配置文件 在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的属性中。