Yii2:如何为GridView列属性定义格式化程序

时间:2015-02-06 11:37:32

标签: yii2

我在is_active表中有一个user(tiny-int)字段。

我还为is_active定义了一些含义:

params.php

中的代码
return [
  'enumData' => [
      'is_active' => [1 => '√', 0 => '×'],
  ]
];

user\index.php

中的代码
<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        [
            'attribute' =>   'is_active',
            'format' => 'raw',
            'value' => function ($model) {
                return Yii::$app->params['enumData']['is_active'][$model->is_active]

            },
        ],
    ],
]); ?>

想要我想要的是user\index.php

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
         'is_active:humanReadable',
    ],
]); ?>

我试图添加一个辅助函数,但我想知道是否有一个简洁的方法来做代码?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

为什么不使用Formatter呢?

您可以通过更改$booleanFormat属性来更改布尔值的输出。

您可以在运行时通过formatter组件

执行此操作
use Yii;

...

Yii::$app->formatter->booleanFormat = ['×', '√'],

或全局使用应用程序配置:

'components' => [
    'formatter' => [
        'class' => 'yii\i18n\Formatter',
        'booleanFormat' => ['×', '√'],
    ],
],

然后在GridView中你可以简单地写:

'is_active:boolean',

<强>更新

多值案例。

假设我们有type属性,请将其添加到您的模型中:

const self::TYPE_1 = 1;
const self::TYPE_2 = 2;
const self::TYPE_3 = 3;

/**
 * @return array
 */
public static function getTypesList()
{
    return [
        self::TYPE_1 => 'Type 1',
        self::TYPE_2 => 'Type 2',
        self::TYPE_3 => 'Type 3',
    ];
}

/**
 * @return string
 */
public function getTypeLabel()
{
    return self::getTypesList()[$this->type];
}

然后在GridView中,您可以输出如下标签:

[
    'attribute' => 'type',
    'value' => 'typeLabel',
],