💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 配置 系统默认的配置采用`yml`格式,保存在定义常量的`RES_DIR`位置,并分为多个优先级的配置。 ## 框架定义的配置优先级 这里展示完整的配置优先级策略Deep代表深度,浅层覆盖深层配置。 ~~~ //手动设置的Config配置 const ConfigDeep = 10; //bootstrap.yml const BootstrapDeep = 9; //application.yml const ApplicationDeep = 8; //application-active.yml const ApplicationActiveDeep = 7; //远程全局Application配置 const ConfigServerGlobalApplicationDeep = 6; //远程Application配置 const ConfigServerApplicationDeep = 5; //远程Application/Active配置 const ConfigServerApplicationActiveDeep = 4; ~~~ ## 配置优先级 >[danger] 最高优先级会覆盖最低优先级的配置。 ~~~ ├─resources 应用目录 │ ├─bootstrap.yml 最低 │ ├─application.yml 中 │ ├─application-ENV.yml 最高 ~~~ 配置加载的顺序为(1->2->3)bootstrap->application->application-ENV > 如果希望修改配置文件的位置,可以在入口文件中定义独立的配置目录,修改`RES_DIR`常量定义即可,例如: ~~~php define("RES_DIR", __DIR__ . "/conf"); ~~~ ## 配置文件隔离 在` bootstrap.yml`或`application.yml`配置 中增加以下配置, 修改对应的`active` 值,如`active` 为`local` 即加载application-local.yml 文件。依照`Deep`深度覆盖规则,`application-local.yml`将覆盖之前的配置。 ~~~ esd: profiles: active: local ~~~ ## ${XXX:YYY}表达式 配置中支持${XXX}和${XXX:YYY}表达式,其中XXX会优先从PHP的常量定义中获取,如果没有则会去寻找系统环境变量,如果依旧没有会在已有的配置中寻找值,最终没有找到会返回YYY。 > ${ROOT_DIR} 将会返回常量ROOT_DIR定义的值 > ${ESD_ENV} 假设定义了环境变量ESD_ENV将会返回环境变量ESD_ENV的值 > ${ESD_ENV:local} 假设没有定义变量ESD_ENV将会返回local > ${esd.server.name} 将会返回yml中对应的值 ## 通过环境变量切换配置文件 在系统中增加环境变量 ` export ESD_ENV=local` ,在 application.yml 2级配置 中修改以下配置, ~~~ esd: profiles: active: ${ESD_ENV:local} ~~~ 即读取系统环境变量 `ESD_ENV` 中的值,`local`为系统环境变量不存在时使用的默认值。 ## 环境变量常驻 修改用户的 `.profile` 文件或者 `.bash_profile` ,在其中增加 `ESD_ENV=local` ,执行命令刷新配置文件 `source .profile` 或 `source .bash_profile` 。 ## 获取环境变量 ``` ${ESD_ENV:local} //代表获取ESD_ENV环境变量,如果找不到则为local ${ESD_ENV} //如果你确定存在那么可以不指定默认值。 ${esd.name:test} //代表获取配置中esd.name的值获取不到则为test //同理 ${esd.name} //可以写的更为复杂 my: consule_name: ${esd.name}-${esd.port.http.name} ``` ## 获取常量 ~~~ ${ROOT_DIR} ~~~ ## 例子 如果打开了Debug日志框架启动过程中会打印合并后的配置 ``` yaml esd: logger: name: log level: debug output: "%datetime% \e[32mDEBUG \e[0m : %message% %context% \n" date_format: 'Y-m-d H:i:s' allow_inline_line_breaks: true ignore_empty_context_and_extra: true color: true max_files: 5 server: name: demo http_parse_post: true http_compression: true debug: true banner: "\n ________ ______ ______ \n |_ __ | .' ____ \\ |_ _ `. \n | |_ \\_| | (___ \\_| | | `. \\ \n | _| _ _.____`. | | | | \n _| |__/ | | \\____) | _| |_.' / \n |________| \\______.' |______.' \n " worker_num: 1 max_conn: 1024 port: http: controller_name_space: ESD\Examples\Controller auto_json: true pack_tool: ESD\Plugins\EasyRoute\PackTool\LenJsonPack route_tool: ESD\Plugins\EasyRoute\RouteTool\NormalRoute index_controller_name: CUser name: http host: 0.0.0.0 port: 8081 sock_type: 1 open_http_protocol: true ws_opcode: 1 process: helper: name: helper class_name: ESD\Plugins\Scheduled\HelperScheduledProcess group_name: HelperGroup task-1: class_name: ESD\Go\GoProcess group_name: TaskGroup profiles: active: local console: cmd_class_list: _test_cmd: ESD\Plugins\PHPUnit\TestCmd _reload_cmd: ESD\Plugins\Console\Command\ReloadCmd _restart_cmd: ESD\Plugins\Console\Command\RestartCmd _start_cmd: ESD\Plugins\Console\Command\StartCmd _stop_cmd: ESD\Plugins\Console\Command\StopCmd aop: include_paths: .src._go: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src/Go 0: /mnt/c/Users/administrato/PhpstormProjects/esd/examples/src .src: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src .vendor.esd.base-server: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/vendor/esd/base-server cache_dir: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/bin/cache/aop whoops: enable: true cache: timeout: 1800 db: default cache_storage_class: ESD\Plugins\Cache\RedisCacheStorage lock_wait: 100 lock_alive: 10000 security: { } reload: enable: false monitor_dir: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src saber: redirect: 3 content_type: application/json keep_alive: true timeout: 5 ssl_allow_self_signed: true exception_report: 63 retry_time: 3 use_pool: true scan: include_paths: .src: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src session: timeout: 1800 db: default session_storage_class: ESD\Plugins\Session\RedisSessionStorage path: / session_name: SESSIONID http_only: true scheduled: min_interval_time: 1000 mysql: default: host: mysql-aliyun.dev.svc.cluster.local username: huiyi password: huiyi@123 db: huiyi_analysis prefix: t_ redis: default: host: redis-master.dev.svc.cluster.local ``` * [YAML快速入门](http://www.ruanyifeng.com/blog/2016/07/yaml.html) * [YAML语法检查](http://nodeca.github.io/js-yaml/)