roaresearch / yii2-enum
为Yii2模型和表单提供枚举类
1.0.0
2022-06-14 00:47 UTC
Requires
- php: >=8.1.0
- yiisoft/yii2: *
Suggests
- yiisoft/yii2-coding-standards: you can use this package to check for code style issues when contributing to yii
README
ROAResearch Yii2 Enum 扩展为Yii2模型和表单中使用枚举提供了支持。
安装
安装此扩展的首选方式是通过composer。检查此扩展的composer.json以获取其要求和依赖关系。
要安装,请运行以下命令之一:
$ php composer.phar require roaresearch/yii2-enum "*"
或添加以下内容到您的composer.json
文件的require
部分:
"roaresearch/yii2-enum": "*"
用法
创建枚举
此库使用php8.1中添加的枚举功能,要使用它,您需要实现roaresearch\yii2\enum\DescriptiveEnum
接口
use roaresearch\yii2\enum\{DescriptiveEnum, DescriptiveEnumTrait} enum UserStatus: int implements DescriptiveEnum { use DescriptiveEnumTrait; case Pending = 1; case Active = 2; case Banned = 3; }
默认情况下,DescriptiveEnumTrait
定义了所有必需的方法,包括自动尝试将枚举的案例名称转换为可读的名称。例如在上面的案例中
UserStatus::Pending->getDesc(); // is a shorcut for Yii::t('UserStatus', 'Pending');
为模型属性声明枚举
要充分利用此库,需要创建实现roaresearch\yii2\enum\models\EnumMap
接口的模型。
use roaresearch\yii2\enum\{DescriptiveEnum, models\EnumMap, models\EnumMapTrait}; use common\enums\UserStatus; class User extends ActiveRecord implements EnumMap { use EnumMapTrait; public static function enums(): array { return [ `status` => UserStatus::class, ]; } /** * @return string human readable and translated description of the status */ public function getStatusDesc(): ?string { return $this->tryEnum('status')?->getDesc(); } }
getStatusDesc()
方法为可选,它有助于轻松访问状态的描述性说明。
这样,其他工具(如验证器和小部件)可以轻松地与模型交互。
验证器
您可以使用提供的验证器验证属性值是否可以从中提取枚举
use roaresearch\yii2\enum\Validator as EnumValidator; public function rules() { return [ ['status', EnumValidator::class], ]; }
有关枚举的更多信息
从Farystha库升级
- 模型必须实现
EnumMap
接口。 - 模型不再有
getAttributeDesc()
方法,它已丢失,转而使用null
安全操作符。 - 模型的
enums()
方法不再定义枚举本身,而是定义枚举类的映射。方法签名也发生了变化。 - 验证器的
$skipOnEmpty
设置为true
。 - 如果提供的模型不是
EnumMap
或没有为验证属性映射的枚举,则验证器将抛出异常。
许可证
ROAResearch Yii2 Enum在BSD 3-Clause许可证下发布。有关详细信息,请参阅附带文件LICENSE.md
。