Files
rxthinkcmf-wiki/RXThinkCMF_ThinkPhp8_EleVue/zh/core/config.md
T
2026-09-29 10:14:04 +08:00

7.3 KiB
Raw Blame History

5.12 系统配置管理

:::tip 概述 系统配置管理用于动态配置参数,支持分组管理。与参数管理的区别:配置管理支持键值对的分组管理(如网站配置、邮件配置),参数管理是独立的参数实体(如单个开关、阈值)。 :::

模块特点

特性 说明
基类 BaseLogic(系统共享,不隔离)
关联 与 ConfigItem 一对多(通过 config_id)
用途 网站名称、Logo、版权信息等动态配置
缓存 DictService 两级缓存(请求级 + Redis),减少数据库查询

数据库表结构

主表 think_config(配置组)

字段 类型 说明
id int 主键,自增
name varchar(150) 配置组名称(如「网站配置」)
code varchar(150) 配置组编码(如 website_config)
sort int 排序(升序)
note varchar(255) 备注说明
create_user varchar(50) 创建人(BaseModel 自动写入)
create_time datetime 创建时间(BaseModel 自动写入)
update_user varchar(50) 更新人(BaseModel 自动写入)
update_time datetime 更新时间(BaseModel 自动写入)
is_delete int 软删除标记(0=正常,1=已删除)

子表 think_config_item(配置项)

字段 类型 说明
id int 主键,自增
config_id int 所属配置组 ID(关联 think_config.id)
name varchar(150) 配置项名称(如「网站名称」)
code varchar(150) 配置项编码(如 site_name)
value varchar(1000) 配置值
options text 配置选项(JSON 格式,用于 select/radio 等类型)
type varchar(150) 值类型(text / textarea / number / switch / image / file / select)
status int 状态(1=正常,2=停用)
sort int 排序(升序)
note varchar(255) 配置项备注
create_user varchar(50) 创建人(BaseModel 自动写入)
create_time datetime 创建时间(BaseModel 自动写入)
update_user varchar(50) 更新人(BaseModel 自动写入)
update_time datetime 更新时间(BaseModel 自动写入)
is_delete int 软删除标记(0=正常,1=已删除)

API 接口

配置组

方法 路径 权限码 说明
GET /api/config/page sys:config:page 分页列表
GET /api/config/list sys:config:list 全量列表
GET /api/config/detail/:id sys:config:detail 详情
POST /api/config/add sys:config:add 新增
PUT /api/config/update sys:config:update 修改
DELETE /api/config/delete/:id sys:config:delete 删除

网站配置(快捷接口)

方法 路径 权限码 说明
GET /api/config/web/index sys:config:web 获取网站配置(按组返回所有配置项)
POST /api/config/web/save sys:config:web 保存网站配置(批量更新配置项值)

配置项

方法 路径 权限码 说明
GET /api/config/item/page sys:config:item:page 分页列表
GET /api/config/item/list sys:config:item:list 全量列表
GET /api/config/item/detail/:id sys:config:item:detail 详情
POST /api/config/item/add sys:config:item:add 新增
PUT /api/config/item/update sys:config:item:update 修改
DELETE /api/config/item/delete/:id sys:config:item:delete 删除

使用场景

场景 配置组 配置项示例
网站基本信息 网站配置 网站名称、Logo、版权信息、ICP备案号
邮件配置 邮件配置 SMTP服务器、端口、用户名、密码、发件人
短信配置 短信配置 API Key、模板ID、签名
存储配置 存储配置 存储类型(本地/OSS)、AccessKey、Bucket
支付配置 支付配置 商户号、密钥、回调地址
其他 自定义分组 任何需要后台动态配置的参数

代码示例

后端获取配置值

项目中没有 ConfigService,配置值通过 ConfigItem 模型直接查询:

<?php
use app\model\ConfigItem;
use app\model\Config;

// 获取单个配置项的值(按配置组 code + 配置项 code 查询)
$value = ConfigItem::whereHas('config', function ($query) {
    $query->where('code', 'website_config')->where('is_delete', 0);
})
->where('code', 'site_name')
->where('status', 1)
->where('is_delete', 0)
->value('value');
// 返回:'RXThinkCMF'

// 获取整个配置组的所有配置项(关联数组)
$config = Config::where('code', 'website_config')->where('is_delete', 0)->find();
if ($config) {
    $items = ConfigItem::where('config_id', $config->id)
        ->where('status', 1)
        ->where('is_delete', 0)
        ->column('value', 'code');
    // 返回:['site_name' => 'RXThinkCMF', 'site_logo' => '...', 'copyright' => '...']
}

// 通过 API 获取网站配置(推荐,含类型处理和 URL 拼接)
// GET /api/config/web/index → 返回按配置组组织的完整数据

前端获取配置值

// 获取网站配置
const { data } = await http.get('/api/config/web/index')

// 使用配置值
const siteName = data.site_name
const siteLogo = data.site_logo

网站配置保存接口

# -----------------------------------------------------------------------------
# 批量保存网站配置(按配置组 code 批量更新)
# -----------------------------------------------------------------------------
curl -X POST http://localhost:8000/api/config/web/save \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{
    "website": {
      "site_name": "RXThinkCMF",
      "site_logo": "/uploads/logo.png",
      "copyright": "© 2026 RXThinkCMF"
    }
  }'

与参数管理的区别

维度 配置管理(Config) 参数管理(Param)
数据结构 分组 + 配置项(一对多) 独立参数实体
适用场景 关联性强的配置(如网站配置包含多个字段) 独立的开关、阈值
管理界面 按组展示,表单式编辑 列表式管理
获取方式 ConfigItem 模型查询或 /api/config/web/index 接口 ParamService::getValue(code)
缓存策略 两级缓存(请求级 + Redis) 两级缓存(请求级 + Redis)

数据库操作示例

-- 查询所有未删除的配置组
SELECT * FROM think_config WHERE is_delete = 0 ORDER BY sort;

-- 查询某个配置组下的所有启用配置项
SELECT ci.* FROM think_config_item ci
INNER JOIN think_config c ON ci.config_id = c.id
WHERE c.code = 'website_config' AND ci.status = 1 AND ci.is_delete = 0
ORDER BY ci.sort;

-- 直接更新配置项值
UPDATE think_config_item SET value = '新网站名称'
WHERE code = 'site_name' AND config_id = (
  SELECT id FROM think_config WHERE code = 'website_config' AND is_delete = 0
);

相关文档