yii2中项目中对tinyint中各种值的处理-enum类的封装使用

数据库中经常会使用tinyint 的字段如:

status : -1删除;0禁用;1启用;

schooleType : 1小学;2中学;3高中;4大学;等

为了避免在 控制器,模型,视图中大量出现硬编码情况。要使用常量来代替 1,2,3这样数值;

代码如下;


namespace common\enums;

use Yii;

trait Enum
{

    public static function getText($int) :string
    {
        return isset(self::getListExplain()[$int]) ? self::getListExplain()[$int] : '';
    }

    public static function getInt($name) :int
    {

        $nameArr = array_flip(self::getListExplain());
        return isset($nameArr[$name]) ? $nameArr[$name] : 0; //对应数据库默认值
    }
}

-------------------------------------------------------------------

namespace common\enums;

use Yii;

class ApplyDegreeTypeEnum
{
    use Enum;

    const BACHELOR = 1;
    const MASTER = 2;
    const DOCTOR = 3;


    public static function getListExplain(){

        return [
            self::BACHELOR => Yii::t('common/enum', '本科'),
            self::MASTER => Yii::t('common/enum', '硕士'),
            self::DOCTOR => Yii::t('common/enum', '博士'),
        ];
    }

}

分析:一开始使用的是 父类继承结果总是 无法使用子类 的 东西;使用trait 则可以 调用static 函数来使用。

原则:最好要通过函数来使用 类的属性(特别是数组)这样可以把对 特殊情况(非空,不存在的)情况进行判断处理,外部调用者就不用再考虑那些个情况了。

对 数值 的 文本展示 支持 多语言版本。关键是使用 Yii::t()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章