gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:19:50 24 4
gpt4 key购买 nike

我在 user 表中有一个 is_active(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',
],
]); ?>

我尝试添加一个辅助函数,但我想知道是否有一种巧妙的方法可以像代码一样做到这一点?

感谢您的帮助。

最佳答案

为什么不使用 Formatter为此?

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

您可以在运行时通过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',
],

关于Yii2:如何为 GridView 列属性定义格式化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com