# 6.12 参数管理 :::tip 概述 参数管理维护系统级配置参数(存于 `laravel_param` 表),如默认密码、限流阈值等。`ParamService`(横切服务)提供带两级缓存的读取方法,业务代码不直接查表。 ::: ## 模块特点 | 特性 | 说明 | |------|------| | 基类 | `BaseService`(系统共享,不隔离) | | 唯一校验 | `code` 全局唯一 | | 缓存 | 读取走 `ParamService` 两级缓存(请求级 + 持久缓存) | | 模糊搜索 | `name`、`code` | | 精确匹配 | `type`、`status` | ## 数据库表结构 ```sql CREATE TABLE `laravel_param` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '主键ID', `name` varchar(100) NOT NULL COMMENT '参数名称', `code` varchar(100) NOT NULL COMMENT '参数编码', `value` varchar(255) NOT NULL COMMENT '参数值', `type` int NOT NULL COMMENT '参数类型:0-系统 1-业务', `status` int NOT NULL COMMENT '参数状态:1-正常 2-禁用', `sort` int NOT NULL COMMENT '参数排序', `note` varchar(255) DEFAULT NULL COMMENT '参数备注', `create_user` varchar(50) DEFAULT NULL COMMENT '创建人', `create_time` datetime DEFAULT (now()) COMMENT '创建时间', `update_user` varchar(50) DEFAULT NULL COMMENT '更新人', `update_time` datetime DEFAULT (now()) COMMENT '更新时间', `is_delete` int DEFAULT 0 COMMENT '删除标识:0-正常 1-已删除', PRIMARY KEY (`id`) ) COMMENT = '系统参数表'; ``` ## API 接口 | 方法 | 路径 | 权限码 | 说明 | |------|------|--------|------| | GET | `/api/param/page` | sys:param:page | 分页列表 | | GET | `/api/param/list` | sys:param:list | 全量列表 | | GET | `/api/param/detail/{id}` | sys:param:detail | 详情 | | POST | `/api/param/add` | sys:param:add | 新增 | | PUT | `/api/param/update` | sys:param:update | 修改 | | DELETE | `/api/param/delete/{id}` | sys:param:delete | 删除 | | DELETE | `/api/param/batchDelete` | sys:param:batchDelete | 批量删除 | ## Service 配置(摘自 `ParamController` 构造函数中的匿名类,来自项目实际代码) 本模块**不注入独立 Service 类**,而是在控制器构造函数中以匿名类组合 `BaseService` 与三个 Trait(声明式配置替代独立 Service): ```php // app/Http/Controllers/Api/ParamController.php(构造函数内匿名类,节选) $this->paramService = new class extends BaseService { use HasCrudOperations, HasQueryScopes, HasUniqueCheck; protected string $modelClass = Param::class; // 分页时模糊匹配的字段(name / code 模糊匹配) protected array $pageLikeFields = ['name', 'code']; // 分页时精确匹配的字段(status 精确匹配) protected array $pageEqFields = ['status']; // 唯一性校验:code 全局唯一 protected array $uniqueFields = ['code']; }; ``` :::tip 管理与读取分离 - **管理端**(本模块):走标准 CRUD 接口维护参数; - **业务读取**:统一走横切服务 `ParamService::get()` 等静态方法(带缓存),不要在业务代码里直接查 `laravel_param` 表。 ::: ## 使用 ParamService 读取参数 ```php use App\Services\ParamService; // 获取字符串参数 $value = ParamService::getString('DEFAULT_PASSWORD', '123456'); // 获取整数参数 $value = ParamService::getInt('MAX_LOGIN_ATTEMPTS', 5); // 获取布尔参数 $value = ParamService::getBool('ENABLE_SMS', false); // 获取默认密码(从系统参数读取,默认 '123456',PasswordService 即由此读取) $password = ParamService::get('DEFAULT_PASSWORD', '123456'); ``` 详细方法与缓存说明见 [5.13 系统参数管理](/zh/core/param.html)。 :::warning 修改参数后的缓存 参数无 Observer 自动失效,修改后需 `ParamService::clearCache($code)` 或 `php artisan cache:clear` 兜底,否则旧值在 TTL 内仍被读取。 ::: :::tip 与配置管理的区别 - **参数管理(Param)**:独立的键值对,适合系统级参数(默认密码、限流阈值) - **配置管理(Config)**:分组 + 配置项,适合网站配置(名称、Logo、SMTP),见 [5.12 系统配置管理](/zh/core/config.html) :::