Yii2 GridView值调用模型函数

时间:2016-08-05 18:38:26

标签: gridview yii2

在我的用户模型中,我有一个功能:

public function getRole() {
    if ($this->role == self::ROLE_USER) {
        return "user";
    } else if ($this->role == self::ROLE_ADMIN) {
        return "admin";
    }

    return "unassigned";
}

在GridView中我想调用它,但无法弄清楚如何在Yii2中,旧的Yii方式似乎不起作用:

[
    'attribute' => 'role',
    'filter' => false,
    'format' => 'raw',
    'value' => '$model->getRole()',
],

我不想使用匿名函数:

'value' => function($model) {
    switch($model->role) {
        case 10:
            return "user";
            break;
        case 90;
            return "admin";
            break;
        default;
            return "unassigned";
            break;
    }
},

2 个答案:

答案 0 :(得分:4)

您可以使用闭包(匿名函数)

[
  'attribute' => 'role',
  'filter' => false,
  'format' => 'raw',
   'value' => function ($model) {
       return  $model->getRole();
   },
],

可以使用字符串或匿名函数(无其他)

来设置value属性
  

$ value - 公共财产

     

匿名函数或使用的字符串   确定要在当前列中显示的值。

     

如果这是一个匿名函数,将为每一行调用它   返回值将用作每个数据显示的值   模型。

http://www.yiiframework.com/doc-2.0/yii-grid-datacolumn.html# $值细节

如果所需的值与$ model实例相关,则匿名函数是唯一的可能性

答案 1 :(得分:0)

执行此操作的其他方法是使用魔术方法。例如:

'columns' => [
   ...
   'role'
   ...
]

在模型中使用魔术方法:

public function getRole(){return 'admin';}

渲染就足够了。容易,并且有很多选择。您可以了解更多here