在我的用户模型中,我有一个功能:
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;
}
},
答案 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。