# 系统配置(sysconfig)机制与扩展规范 > 来源:框架内置(ulthon-) > 作用域:需要通过后台界面管理的可变配置项(域名、密钥、开关等) > 触发条件:新增/修改后台可变配置、读取 `sysconfig()`、覆盖 `system/config/*` 视图时加载 ## 一、核心机制 ### 1.1 数据存储 配置存储在 `system_config` 表,结构为 `group + name + value` 的键值对: | 字段 | 说明 | 示例 | |------|------|------| | `group` | 配置组(Tab 页粒度) | `site`、`upload`、`wechat` | | `name` | 配置键名 | `site_domain`、`upload_type` | | `value` | 配置值(字符串) | `http://example.com`、`local_public` | | `remark` | 后台显示的说明文字 | `站点域名` | | `sort` | 排序 | 0 | ### 1.2 读取:sysconfig() 辅助函数 定义位置:`extend/base/helper.php:133`。 ```php // 1. 读单个配置项(推荐) $value = sysconfig('site', 'site_domain'); // 2. 读整组配置(返回 [name => value] 数组) $all = sysconfig('site'); // $all['site_domain'], $all['site_name'] ... // 3. 提供默认值(值为 null 时返回默认) $value = sysconfig('site', 'site_domain', 'https://default.com'); // 4. 跨组快捷查找($name 传 true,$group 参数当字段名用) $value = sysconfig('site_domain', true); ``` **缓存机制**: - 用 `Cache::tag('sysconfig')` 缓存,TTL 3600 秒 - 单值缓存 key:`sysconfig_{group}_{name}` - 整组缓存 key:`sysconfig_{group}` - 保存配置时 `TriggerService::updateSysconfig()` 自动清除整个 `sysconfig` 标签的缓存 ### 1.3 保存:ConfigBase::save() POST 到 `system.config/save`,控制器逻辑位于 `extend/base/admin/controller/system/ConfigBase.php`: 1. 取 `group_name` 隐藏域确定配置组 2. 遍历 POST 的其余字段,逐个 upsert 到 `system_config`(group + name 存在则更新,不存在则创建) 3. 调用 `TriggerService::updateSysconfig()`(`extend/base/admin/service/TriggerServiceBase.php:45`)清缓存 **关键**:`group_name` 不存在时按 name 全局匹配更新(无 group 限定);有 `group_name` 时严格按 group + name 匹配。**每个配置表单必须包含 ``**。 ## 二、配置视图结构 ### 2.1 文件层级 ``` 配置页面入口(框架内核,可覆盖): extend/base/admin/view/system/config/index.html ← Tab 容器 各 Tab 内容(include,可覆盖): extend/base/admin/view/system/config/site.html ← 网站设置 extend/base/admin/view/system/config/logo.html ← LOGO 配置 extend/base/admin/view/system/config/upload.html ← 上传配置 ``` ### 2.2 index.html 结构(Tab 容器) ```html