Ответ 1
Два способа, которыми я знаю (сейчас):
Formatter
Установите nullDisplay of Formatter для чего-то другого, кроме нулевого. Вы можете сделать это в глобальной конфигурации или для одного GridView или DetailView.
Глобально (обычно в файлах config/web.php
или <application>/config/main.php
):
'components' => [
...
'formatter' => [
'class' => 'yii\i18n\Formatter',
'nullDisplay' => '',
],
...
],
В определенном GridView (то же самое с DetailView):
<?= GridView::widget([
'dataProvider' => $myProvider,
'formatter' => ['class' => 'yii\i18n\Formatter','nullDisplay' => ''],
'columns' => [
...
],
]); ?>
Задайте значение
Наверное, не так элегантно. В определенном 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 '';
}
},
],
...
],
]); ?>
Или в определенном 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) : '',
],
...
],
]) ?>
Два подсказки
Если одновременно используется несколько подходов: установка значения (напрямую или по функциям) переопределяет конфигурацию форматирования Grid/DetailView, а это, в свою очередь, переопределяет глобальную конфигурацию форматирования.
Вы также можете определить что-то отличное от пустой строки. Например. если используется бутстрап, вы можете использовать '<span class="glyphicon glyphicon-question-sign"></span>'
для получения символа для отсутствующих значений.