我在 Yii2 GridView 小部件中显示一些列,“执行人员名称”是其中之一,但它应该仅在主管登录时显示,而不是在执行人员登录时显示。
当我将可见值硬编码为零时,它不会显示如下:
[
'label' => 'Executive Name',
'attribute' => 'cs.first_name',
'visible' => '0',
],
但我想有条件地显示它,如下所示:
[
'label' => 'Executive Name',
'attribute' => 'cs.first_name',
'visible' => function ($data) {
if ($data->hc_customersupport->is_supervisor) {
return '1'; // or return true;
} else {
return '0'; // or return false;
}
},
],
请告知这种方法是否正确。
最佳答案
yii\grid\DataColumn
是从 yii\grid\Column
扩展而来的,其中 visible属性(property)。正如您从文档中看到的,它只接受 bool 值,但是当然您可以通过传递返回 bool 值的表达式来动态计算这些值。 RBAC 示例:
use Yii;
...
'visible' => Yii::$app->user->can('supervisor'),
传递 callable 是不允许的,并且没有任何意义。从逻辑上考虑一下 - 为什么整个列的可见性依赖于具体行(模型)?
P.S. 您应该返回 bool 值,而不是整数或字符串。您的表达也可以简化为:
return $data->hc_customersupport->is_supervisor;
但是 is_supervisor
检查绝对是错误的,不应该这样调用(通过模型)。最好改用 RBAC。
关于gridview - Yii2 GridView 有条件隐藏列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32196111/