2015-10-23 03:17:09 4972次浏览 6条回答 1 悬赏 100 金钱

大家好,请问各位都是如何解决下面这个需求的。

比如 有model类user。其中定义常量

const ADMIN = 0; //管理
const USER = 1; //用户
const CLIENT = 2; //客户

实际数据库存储的时候 肯定是 0、1、2的值了。

但是在页面上显示的时候,需要的是 管理、用户、客户

请问各位是如何快速、优雅的 获取这些汉字内容的呢?

最佳答案

  • trylife 发布于 2015-10-23 10:40 举报
    class User extend ActiveRecord {
        public $userRole = [
          0 => Administrator,
          1 => User,
          2 => Client 
       ];
    
       public function getRoleName($roleId){
           if(!array_key_exists()) ...
           return $this->$userRole[$roleId];
       }
    }
    
    觉得很赞
  • 回答于 2015-10-23 09:19 举报

    if(1) echo 用户
    if(2) echo 客户
    ……

    觉得很赞
  • 回答于 2015-10-23 10:18 举报

    在user model里写个专门的方法

    public function getRoleName($role_id){
      $role_name = '';
      switch ($role_id) {
    	case self::ADMIN  :
    		$role_name = '管理员'break;
    	case self::USER :
    		$role_name = '用户'break;
       }  
       return $role_name;
    }
    
  • 回答于 2015-10-23 10:55 举报
    1. 如果常量数量多、汉字内容需要在线修改或增加的话,一般在数据库中建一个字典表,保存id和字面的映射关系,但平时变化不大可以写到缓存中,从缓存中读取,当内容发生变化时再更新缓存。

    2. 如果常量数量不多、汉字内容也不需要在线调整的话,可以新建一个统一管理id和字面关系的配置文件,比如放在common/config/constants.php里:

    <?php
    return [
        'role' => [
            0 => '管理',
            1 => '用户',
            2 => '客户',
        ],
    ];
    

    然后,在common/config/params.php里增加constants项:

    <?php
    return [
        'constants' => require(__DIR__ . '/constants.php'),
    ];
    

    在Model类(User)里可以增加一个配置索引项与constants中的内容关联:

    const ADMIN = 0; //管理
    const USER = 1; //用户
    const CLIENT = 2; //客户
    
    public static $constantIndex = 'role'; // 与constants.php里的配置组对应
    

    这样,在业务代码中要获取id对应的字面就可以这样:

    $adminRoleLabel = Yii::$app->params['constants'][User::$constantIndex][User::ADMIN];
    

    foreach ($users as $user) {
        $roleLabel = Yii::$app->params['constants'][User::$constantIndex][$user->role];
    }
    
  • 回答于 2015-10-27 10:32 举报
    $param=0;//0管理;1用户;2客户;
    if(user::ADMIN===$param)echo '管理';
    if(user::USER===$param)echo '用户';
    if(user::CLIENT===$param)echo '客户';
    
  • 回答于 2015-10-27 18:14 举报
        public function getRolenames()
        {
            return [
                self::ADMIN => '管理',
                self::USER => '用户',
                self::CLIENT => '客户',
            ];
        }
    
        public function getRolename()
        {
            return $this->getRolenames()[$this->role];
        }
    
您需要登录后才可以回答。登录 | 立即注册
xjdata
CEO

xjdata

注册时间:2011-12-07
最后登录:1小时前
在线时长:112小时38分
  • 粉丝23
  • 金钱14169
  • 威望75
  • 积分16039

热门问题