iqomp / enum
Requires (Dev)
Suggests
- hyperf/translation: Allow enum to be translated to id-ID or en-US
- iqomp/formatter: Object formatter for format type enum and multiple-enum
- iqomp/validator: Form validation for enum rule
README
静态数据枚举提供者。此模块提供可能由应用程序使用的枚举列表。
安装
composer require iqomp/enum
发布配置
php bin/hyperf.php vendor:publish iqomp/enum
配置
要添加新的枚举数据或修改现有数据,请修改 /config/autoload/enum.php
文件,以返回以下数据:
<?php return [ 'enums' => [ 'gender' => [ '0' => 'Unknown', '1' => 'Male', '2' => 'Female', '3' => 'Non-Binary' ] ] ];
或者,如果您喜欢使用 ConfigProvider.php
文件,请按以下方式添加数据:
<?php // ... class ConfigProvider { public function __invoke() { return [ 'enum' => [ 'enums' => [ 'gender' => [ '0' => 'Unknown', '1' => 'Male', '2' => 'Female', '3' => 'Non-Binary' ] ] ] ]; } }
请确保更新您的 composer.json
文件,以便 hyperf 识别配置文件
"extra": { "hyperf": { "config": "Vendor\\Module\\ConfigProvider" } }
翻译
如果您希望枚举标签被翻译,请确保安装模块 hyperf/translation。在 storage/languages/vendor/enum/{locale}/{enum-name}.php
文件夹中添加新的翻译。
<?php // gender.php return [ 'Unknown' => 'Unknown', 'Female' => 'Female', 'Male' => 'Male', 'Non-Binary' => 'Non Binary' ];
用法
使用类 Iqomp\Enum\Enum
创建具有指定值的枚举对象。
<?php use Iqomp\Enum\Enum; // $enum = new Enum('gender', '1', 'int'); $enum = new Enum('std-gender', '2', 'str'); $enum->value; $enum->options; $enum->label;
方法
该类对象定义的方法列表
__construct(string $name, $value=null, string $type=null): Enum
创建新的枚举对象。此方法接受以下参数:
name::string
枚举数据列表的名称。value::int|str
枚举项的值。type::string
将提供的值转换为int
或str
。
__get($name): mixed
获取枚举数据属性,接受名称为 value
、label
和 options
。
__toString(): string
返回字符串枚举标签。
jsonSerialize()
将枚举转换为 json_encode 准备的参数。
表单验证器
如果您正在使用 iqomp/validator 对象或表单验证器,此模块添加了一个名为 enum
的新表单验证规则,以验证用户提供的数据是否在已注册的枚举中。
enum => name
确保用户提供的值在已注册的枚举中,用户提交的数据的值可以是单个 int/str 或它们的数组。
// ... 'rules' => [ 'enum' => 'std-gender' ] // ...
代码检查器
运行以下脚本以运行 psr-12 代码检查器
composer lint
格式化器
如果您正在使用 iqomp/formatter 对象格式化器,此模块添加了一个名为 enum
的新对象格式类型,以及 multiple-enum
,可以将对象属性值转换为枚举对象。
enum
将当前对象属性值转换为 Iqomp\Enum\Enum
对象。
// ... '/field/' => [ 'type' => 'enum', 'enum' => 'std-gender' ] // ...
multiple-enum
将当前对象属性值转换为以自定义分隔符分隔的 Iqomp\Enum\Enum
数组
// ... '/field/' => [ 'type' => 'multiple-enum', 'enum' => 'std-gender', 'separator' => ',' // PHP_EOL, 'json' ] // ...
如果未设置属性 separator
,则使用 PHP_EOL
。它还接受分隔符 'json'
,这将使用 json_decode
进行分隔。如果对象属性的值已经是数组,则不使用分隔符或 explode。