Yii2:删除“删除”;(未设定)“;在GridView和DetailView中查找空值

Yii2:删除“删除”;(未设定)“;在GridView和DetailView中查找空值,gridview,view,yii2,detailview,Gridview,View,Yii2,Detailview,如何删除或替换GridView和ListView中的字符串(未设置) 格式化程序 设置为null以外的其他值。您可以在全局配置中执行此操作,也可以在单个GridView或DetailView中执行此操作 全局(通常在config/web.php或/config/main.php文件中): “组件”=>[ ... “格式化程序”=>[ 'class'=>'yii\i18n\Formatter', “空显示”=>“”, ], ... ], 在某些GridView中(与DetailView相同):

如何删除或替换GridView和ListView中的字符串
(未设置)

格式化程序

设置为null以外的其他值。您可以在全局配置中执行此操作,也可以在单个GridView或DetailView中执行此操作

全局(通常在
config/web.php
/config/main.php
文件中):

“组件”=>[
...
“格式化程序”=>[
'class'=>'yii\i18n\Formatter',
“空显示”=>“”,
],
...
],
在某些GridView中(与DetailView相同):


设置值

可能没那么优雅。在某个GridView中:


或者在某个详细视图中:

<?= DetailView::widget([
   'model' => $model,
   'attributes' => [
      ['label' => 'labelName', 'value' => function($data) {
         if (!empty($data->tDeal->DealDate)) { 
            return $data->tDeal->DealDate; 
         } else { return ''; }
      }],
    ],
])
?>

两个提示

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

您还可以定义与空字符串不同的内容。例如,如果使用引导,您可能希望使用
\yii\bootstrap\Html::icon('question-sign')
(或
'
)来获取缺少值的符号。

我不建议使用设置为空的显示方法。最好是检查您访问的变量是否为null

我愿意

//模型代码
公共函数getProjectName()
{
$project=$this->project;
返回($project)?$project->名称:“”;
}
//你的网格视图

在gridview配置中设置emptycell:

<?= GridView::widget([
  'dataProvider' => $dataProvider,
  'filterModel' => $searchModel,
  'emptyCell'=>'-',
  'columns' => [
      ['class' => 'yii\grid\SerialColumn'],
.........
      ['class' => 'yii\grid\ActionColumn'],
  ],
 ]); ?>

对于
kartik\grid\GridView

'class' => 'kartik\grid\EditableColumn',
'attribute'=>'myAttribute',
'header' => 'myHeader',                                            
'editableOptions' => [                         
    'inputType' => \kartik\editable\Editable::INPUT_TEXT,
    'valueIfNull' => '-',

/**
 * @var string the value to be displayed. If not set, this will default to the attribute value. If the attribute
 * value is null, then this will display the value as set in [[valueIfNull]].
 */
public $displayValue;
使用以下命令:

use Yii;

...

Yii::$app->formatter->nullDisplay = 'N\A';

对于DetailView和GridView,我在列中使用if-else

详细视图:

<?= DetailView::widget([
   'model' => $model,
   'attributes' => [
      ['label' => 'labelName', 'value' => function($data) {
         if (!empty($data->tDeal->DealDate)) { 
            return $data->tDeal->DealDate; 
         } else { return ''; }
      }],
    ],
])
?>

GridView:

<?= GridView::widget([
   'dataProvider' => $dataProvider,
   'columns' => [
      ['label' => 'labelName', 'value' => function($data) {
         if (!empty($data->tDeal->DealDate)) { 
            return $data->tDeal->DealDate; 
         } else { return ''; }
      }],
    ],
])
?>


为什么将每个项都检查为null要比将formatter设置为null好。这是不对的。正如文档所述,emptyCell将显示什么时候没有返回任何内容。