Yii2:删除GridView和DetailView中的"(未设置)"以获取空值

rob*_*sch 21 gridview view detailview yii2

如何(not set)在GridView和ListView中删除或替换字符串?

rob*_*sch 57

我知道的两种方式(现在):

格式化

Formatter的nullDisplay设置 null以外的值.您可以在全局配置或单个GridView或DetailView中执行此操作.

全球(通常在文件中config/web.php<application>/config/main.php文件中):

'components' => [
    ...
    'formatter' => [
        'class' => 'yii\i18n\Formatter',
        'nullDisplay' => '',
    ],
    ...
],
Run Code Online (Sandbox Code Playgroud)

在某些GridView中(与DetailView相同):

<?= GridView::widget([
    'dataProvider' => $myProvider,
    'formatter' => ['class' => 'yii\i18n\Formatter','nullDisplay' => ''],
    'columns'      => [
        ...
    ],
]); ?>
Run Code Online (Sandbox Code Playgroud)

设置值

可能不那么优雅.在某个GridView中:

<?= GridView::widget([
    'dataProvider' => $myProvider,
    'columns'      => [
        ...
        [
            'attribute' => 'some_attribute',
            'format'    => 'raw',
            'value'     => function (ModelClass $model) {
                if ($model->some_attribute != null) {
                    return $model->some_attribute; 
              //or: return Html::encode($model->some_attribute)
                } else {
                    return '';
                }
            },
        ],
        ...
    ],
]); ?>
Run Code Online (Sandbox Code Playgroud)

或者在某个DetailView中:

<?= DetailView::widget([
    'model'      => $model,
    'attributes' => [
        ...
        [
            'attribute' => 'some_attribute',
            'value' => $model->some_attribute != null ? $model->some_attribute : '', 
      //or: 'value' => $model->some_attribute != null ? Html::encode($model->some_attribute) : '',
        ],
        ...
    ],
]) ?>
Run Code Online (Sandbox Code Playgroud)

两个提示

如果同时使用多种方法:设置值(直接或通过函数)会覆盖Grid/DetailView的格式化程序配置,这反过来会覆盖全局格式化程序配置.

您还可以定义与空字符串不同的内容.例如,如果使用bootstrap,您可能希望使用\yii\bootstrap\Html::icon('question-sign')(或'<span class="glyphicon glyphicon-question-sign"></span>')获取缺失值的符号.


小智 8

用这个:

use Yii;

...

Yii::$app->formatter->nullDisplay = 'N\A';
Run Code Online (Sandbox Code Playgroud)