gridview - Yii2 GridView 有条件隐藏列

标签 gridview yii yii2

我在 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/

相关文章:

php - 如何同时向一个表中插入多条记录?

c# - 如何避免每次初始化控件时都重新绑定(bind)网格?

android - 对自定义小部件实现单选/复选框逻辑

php - 复合 CHtml::listData 值

php - Yii2 View 中的组件函数

php - 检查表是否存在

php - yii2 Bootstrap 模态隐藏显示

.net - asp :GridView textbox always return blank value

javascript - 验证 gridview 中选中的项目

php - 使用 ajax 在 Yii 中上传文件