🛠️ 一、 完整定义:如何创建一个全能枚举类
为了展示所有功能,我们定义一个名为 TaskStatusEnum 的类。它不仅包含基本信息,还加入了 icon 等扩展属性。
namespace plugin\xbCode\enum;
use plugin\xbCode\base\BaseEnum;
/**
* 任务状态枚举示例 📋
*/
class TaskStatusEnum extends BaseEnum
{
// 💡 每一个常量都是一个包含元数据的数组
const PENDING = [
'label' => '待处理',
'value' => '10',
'style' => 'info', // 纯文本样式标识
'icon' => 'fa fa-clock-o', // 图标类名
'color' => '#1890ff'
];
const PROCESSING = [
'label' => '进行中',
'value' => '20',
'style' => 'primary',
'icon' => 'fa fa-play',
'color' => '#52c41a'
];
const FINISHED = [
'label' => '已完成',
'value' => '30',
'style' => 'success',
'icon' => 'fa fa-check',
'color' => '#faad14'
];
}
🚀 二、 大检阅:BaseEnum 的各种姿势
BaseEnum 提供了非常多的内置方法,让我们来看看它们在 TaskStatusEnum 上的表现。
1. toArray():转换成数组 📦
用于需要遍历所有状态的场景。
$all = TaskStatusEnum::toArray();
/*
输出结果:
[
['label' => '待处理', 'value' => '10', 'style' => 'info', 'icon' => '...', 'key' => 'PENDING'],
['label' => '进行中', 'value' => '20', 'style' => 'primary', 'icon' => '...', 'key' => 'PROCESSING'],
...
]
*/
2. getFieldValue():精准获取某个字段 🎯
用于已知 Value 获取对应的 Label 或 Style。
// 获取名称: 返回 "进行中"
$label = TaskStatusEnum::getFieldValue('20');
// 获取图标: 返回 "fa fa-check"
$icon = TaskStatusEnum::getFieldValue('30', 'fa-question', 'icon');
3. options():生成下拉菜单选项 🔽
直接喂给前端组件,格式完美契合。
$selectOptions = TaskStatusEnum::options();
// 返回: [['label' => '待处理', 'value' => '10'], ...]
4. dict():生成样式/值字典 📖
快速获取对应关系的映射数组。
// 获取状态与样式的对应关系
$styles = TaskStatusEnum::dict('style');
// 返回: ['10' => 'info', '20' => 'primary', '30' => 'success']
5. status():获取包含图标和标签的完整状态数据 🏷️
常用于列表页的格式化输出。
$statusData = TaskStatusEnum::status();
// 返回以 value 为键的完整对象数组,方便根据数据库的值直接查找
💼 三、 业务实战:在代码中如何优雅地使用
不要直接在代码里写 '10',那是魔鬼!请使用枚举:
1. 数据保存逻辑 ✅
public function updateTaskStatus($taskId) {
$data = [
'status' => TaskStatusEnum::PROCESSING['value'], // ✅ 使用枚举,语义清晰
'update_time' => time()
];
// ... 执行数据库更新 ...
}
2. 逻辑判断场景 ⚖️
if ($taskInfo['status'] === TaskStatusEnum::FINISHED['value']) {
return "恭喜,任务已经结束了!🎉";
}
3. 前端界面渲染 🖥️
结合 getFieldValue 获取图标和样式。
// 在控制器传给视图
$statusValue = $task['status'];
$viewData = [
'status_text' => TaskStatusEnum::getFieldValue($statusValue),
'status_icon' => TaskStatusEnum::getFieldValue($statusValue, '', 'icon'),
'status_color' => TaskStatusEnum::getFieldValue($statusValue, '#000', 'color'),
];
4. 高级技巧:Switch 开关配置 🔄
如果你的枚举是像 StateEnum 那样的二元状态,可以使用内置的 switch() 方法:
// 返回适配 Switch 组件的数据格式
$switchConfig = StateEnum::switch();
// 输出: ['onText' => '启用', 'offText' => '禁用', 'trueValue' => '20', 'falseValue' => '10']
🌈 总结:为什么它是开发者的好帮手?
- 所见即所得:代码里看到
TaskStatusEnum::FINISHED就知道是在处理已完成状态。 - 维护零负担:要改颜色?改图标?改文案?只需要动一下枚举类,全项目自动更新!✨
- 多维度支持:不仅仅是 KV 键值对,更能承载样式、图标等 UI 属性,真正实现逻辑与展示的统一。
希望这份“全家桶”示例能让您彻底掌握枚举的使用精髓!💪🚀📚