2016-05-30 17:05:18 5234次浏览 2条回答 1 悬赏 10 金钱

在GridView::widget里,可以用attributeLabels()来指定对应字段的中文,有没类似的方法可以指定value的?

 public function attributeLabels()
    {
        return [
            'log_id' => '日志ID',
            'company' => '来源公司ID',
            'user_id' => '用户ID',
            'modules' => '模块来源',
            'create_time' => '发生时间',
        ];
    }

················
经过一番努力终于早到了解决办法,既然自己回答不了我就在这里分享一下吧
以modules字段为例,他的值有'module_1','module_2','module_3'......
这时我们可以在对应的Model文件中添加以下代码:

    const MODULE_1 = 'module_1'; 
    const MODULE_2 = 'module_2'; 
    const MODULE_3 = 'module_3'; 

    public static $moduleList=[
        self::MODULE_1=>"模块一",
        self::MODULE_1=>"模块二",
        self::MODULE_1=>"模块三"
    ];

    public function getModule(){
        $modules = self::$moduleList[$this->modules];
        return isset($modules) ? $modules : null;
    }

最后修改对应的视图文件,调用getModule方法

<?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            [
                'class' => 'yii\grid\SerialColumn',
                'headerOptions' => ['class' => '']
            ],
            'order_id',
            [
                'attribute' => 'modules',
                'headerOptions' => ['class' => 'col-md-1'],
                'value'=>
                    function($model){
                        return $model->Module;
                    },
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

最后显示的效果是,当数据库存放的值是'module_1','module_2','module_3'......那么前端显示的将是对应的中文'模块一','模块二','模块三'······

最佳答案

  • koko 发布于 2016-05-31 09:12 举报

    设置字段默认值?

    3 条回复
    回复于 2016-05-31 15:17 回复

    但如果出现了mod*_4,前台不就是为空了?

    回复于 2016-05-31 15:23 回复

    对啊,所以要对应增加东西,以这个例子类推后面怎么加你应该知道了吧

    回复于 2016-05-31 15:28 回复

    你这种做法是正确的,我一般直接在前台就定义一个数组去显示对应的中文了,比如 男->1 女->2 什么的.

您需要登录后才可以回答。登录 | 立即注册
linjasonyii
经理

linjasonyii

注册时间:2016-04-25
最后登录:2022-05-25
在线时长:18小时50分
  • 粉丝2
  • 金钱905
  • 威望0
  • 积分1085

热门问题