indifferend/yii2-enum

Yii2 可枚举助手

安装: 6

依赖: 2

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:yii2-extension

2.1 2021-06-02 17:24 UTC

This package is auto-updated.

Last update: 2024-09-29 05:49:08 UTC


README

Yii2 枚举扩展


Yii Framework 2.0 的枚举实现

Latest Stable Version Total Downloads License Build Status Scrutinizer Code Quality

支持我们

您的业务是否依赖于我们的贡献?通过Patreon联系我们并支持我们。所有承诺都将用于维护和开发新功能。

安装

安装此扩展的首选方式是通过composer

运行以下命令:

php composer.phar require --prefer-dist indifferend/yii2-enum "*"

或者将以下内容添加到您的 composer.json 文件的 require 部分:

"indifferend/yii2-enum": "*"

可用方法

  • createByName() - 使用值的名称创建一个新的类型实例。
  • getValueByName() - 通过值(标签)返回常量键。
  • createByValue() - 使用值创建一个新的类型实例。
  • listData() - 返回包含常量值和标签的关联数组。
  • getLabel()- 通过键返回常量标签。
  • getConstantsByName() - 返回此类型的常量列表(按名称)。
  • getConstantsByValue() - 返回此类型的常量列表(按值)。
  • isValidName() - 检查名称是否对此类型有效。
  • isValidValue() - 检查值是否对此类型有效。

声明

<?php

namespace app\models\enums;

use indifferend\enum\helpers\BaseEnum;

class PostStatus extends BaseEnum
{
    const PENDING = 0;
    const APPROVED = 1;
    const REJECTED = 2;
    const POSTPONED = 3;
    
    /**
     * @var string message category
     * You can set your own message category for translate the values in the $list property
     * Values in the $list property will be automatically translated in the function `listData()`
     */
    public static $messageCategory = 'app';
    
    /**
     * @var array
     */
    public static $list = [
        self::PENDING => 'Pending',
        self::APPROVED => 'Approved',
        self::REJECTED => 'Rejected',
        self::POSTPONED => 'Postponed',
    ];
}

枚举创建

$status = new PostStatus(PostStatus::PENDING);

// or you can use the magic methods

$status = PostStatus::PENDING();

静态方法

PostStatus::getConstantsByValue() // ['PENDING', 'APPROVED', 'REJECTED', 'POSTPONED']
PostStatus::getConstantsByName() // ['PENDING' => 0, 'APPROVED' => 1, 'REJECTED' => 2, 'POSTPONED' => 3]
PostStatus::isValidName(1) // false
PostStatus::isValidName('APPROVED') // true
PostStatus::isValidValue(1) // true
PostStatus::isValidValue('Approved') // false
PostStatus::listData() // ['Pending', 'Approved', 'Rejected', 'Postponed']
PostStatus::getLabel(1) // Approved
PostStatus::getValueByName('Approved') // 1

类型提示和验证规则

<?php

use models\enums\PostStatus;
use yii\db\ActiveRecord;

class CommentModel extends ActiveRecord
{
    public function rules()
    {
        return [
            ['status', 'default', 'value' => PostStatus::APPROVED],
            ['status', 'in', 'range' => PostStatus::getConstantsByName()],
        ];
    }

    public function setStatus(PostStatus $status)
    {
        $this->status = $status->getValue();
    }

    public function getStatus()
    {
        return $this->status;
    }
}