我在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',
],
]); ?>
我试图添加一个辅助函数,但我想知道是否有一个简洁的方法来做代码?
感谢您的帮助。
答案 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',
],