Files
rxthinkcmf-wiki/RXThinkCMF_Laravel13_EleVue/zh/modules/param.md
T
2026-10-08 17:50:29 +08:00

106 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
:::