Yii2 GridView有条件地隐藏列

K A*_*ngh 10 gridview yii yii2

我在Yii2 GridView小部件中显示了一些列,'Executive Name'是其中之一,但只有在Supervisor登录时才会显示,而不是在Executive登录时显示.

当我将硬编码显示为零时,它不会显示如下:

[
    'label' => 'Executive Name',
    'attribute' => 'cs.first_name',
    'visible' => '0',
],
Run Code Online (Sandbox Code Playgroud)

但我希望有条件地显示它:

[
    '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;
        }
    },
],
Run Code Online (Sandbox Code Playgroud)

请告诉我这种方法是否正确.

aro*_*hev 16

yii\grid\DataColumn从中延伸yii\grid\Column可见属性.从文档中可以看出,它只接受布尔值,但当然你可以通过传递一个返回布尔值的表达式来动态计算它们.RBAC示例:

use Yii;

...

'visible' => Yii::$app->user->can('supervisor'),
Run Code Online (Sandbox Code Playgroud)

传递可调用是不允许的,没有任何意义.从逻辑上考虑这一点 - 为什么整列的可见性取决于具体的行(模型)?

PS你应该返回布尔值,而不是整数或字符串.你的表达也可以简化为:

return $data->hc_customersupport->is_supervisor;
Run Code Online (Sandbox Code Playgroud)

但是is_supervisor检查是定义错误的,它不应该被调用(通过模型).最好使用RBAC.


小智 7

这个很好用

[
    'label' => 'Executive Name',
    'attribute' => 'cs.first_name',
    'visible' => 'Condition' ? true : false
],
Run Code Online (Sandbox Code Playgroud)

您可以'Condition'用您的条件替换文本,例如Yii::$app->user->can('supervisor')此参数是否适合您。