roaresearch/yii2-enum

为Yii2模型和表单提供枚举类

安装: 11

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 0

开放问题: 0

类型:yii2-extension

1.0.0 2022-06-14 00:47 UTC

This package is auto-updated.

Last update: 2024-09-14 07:04:53 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

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