---
url: /docs/5.0/server/dictionary.md
---
# 字典功能

字典功能在后台一直是一个存在感很低的功能，尤其是前后端分离系统中。因为字典的数据在服务端，想要跟前端数据联动的话，需要对原始跟字段数据做一些标记。它最大的用处可能在生成代码的，为一些 `Radio` 组件或者 `Select` `Switch` 组件提供一些基础数据。如下
![Catchadmin  字典功能-Laravel Admin](https://image.catchadmin.com/202408231339856.png)

:::info
[CatchAdmin  字典功能视频教程](https://www.bilibili.com/video/BV1RTWReFEHs/)
:::

## 扩展

当字典功能单独作为一个增删改查的功能，只能给前端生成页面提供一些基础数据的时候，其在后台的作用真的是非常小。但是在业务中又有很多地方用到这个。的确给定义一些选项提供了很大的方便，很大程度上保证了数据可以集中管理，不会那么分散。

但是在业务中，会有相当一部分逻辑判断会使用到字典的值。一旦需要使用到，很可能就是出现下面的代码

```php
// 这里以 status 举例，有 1 和 2 两个状态
if ($model->status === 2) {}
```

这种代码在项目里如果大量出现的话，必定会是非常不可读的代码。会导致后期维护产生很多问题。所以以字典为枚举数据管理点，为字典自动生成枚举，提供给项目里面使用，最后会产生这样的代码

```php
// 状态断言
if (Status::Enable->assert($model->status)) {}
```

这样的代码相较于之前有什么好处呢？

* 可读写提高非常之多
* 一旦 `model->status === 2` 大量出现在代码里，如果这个状态改变了，那么改动的地方非常至多，使用枚举，只需要改动枚举值即可

## 枚举生成

我们在字典功能提供了非常方便枚举生成功能

* 自动生成
* 对已有的枚举，会对字典内的值和当前枚举进行对比，如果不同，会覆盖生成

![Catchadmin  字典枚举生成-Laravel Admin](https://image.catchadmin.com/202408231835985.png)

* 列表操作的可以将列表所有字典数据生成枚举
* 数据操作枚举可以生成对应字典的枚举类
