Yii 在DetailView中过滤空值

Yii 在DetailView中过滤空值,yii,yii2,detailview,Yii,Yii2,Detailview,有没有一种简单的方法可以强制Yii2中的DetailView忽略其attributes列表中的这些字段,这些字段对于特定的model是空的 或者唯一的方法是使用自己的函数定义属性列表中的每个属性,并过滤其中的空字段(听起来有点疯狂) 编辑:我认为这是不言自明的,但事实证明并非如此。因此,基本上,我想强制DetailView忽略(不渲染)这些attributeslist元素的行,这些元素在相应的model中具有空(null,空字符串)值,从而导致渲染空表单元格: 您可以将DetailView小部件

有没有一种简单的方法可以强制Yii2中的
DetailView
忽略其
attributes
列表中的这些字段,这些字段对于特定的
model
是空的

或者唯一的方法是使用自己的函数定义
属性
列表中的每个属性,并过滤其中的空字段(听起来有点疯狂)

编辑:我认为这是不言自明的,但事实证明并非如此。因此,基本上,我想强制
DetailView
忽略(不渲染)这些
attributes
list元素的行,这些元素在相应的
model
中具有空(null,空字符串)值,从而导致渲染空表单元格:


您可以将DetailView小部件的
模板
参数定义为具有以下签名的回调函数
函数($attribute,$index,$widget)
,并且将为每个属性调用此回调,因此您可以为行定义所需的呈现:

DetailView::widget([
    'model' => $model,
    'template' => function($attribute, $index, $widget){
        //your code for rendering here. e.g.
        if($attribute['value'])
        {
            return "<tr><th>{$attribute['label']}</th><td>{$attribute['value']}</td></tr>";
        }
    },
    //other parameters
]);
DetailView::widget([
'model'=>$model,
“模板”=>函数($attribute、$index、$widget){
//您在此处渲染的代码。
如果($attribute['value']))
{
返回“{$attribute['label']}{$attribute['value']}”;
}
},
//其他参数
]);

这样做会更好吗?它保留了一些细节,如:
updated\u at:datetime
,使用上述解决方案之一,它将只显示基础值,而不是转换后的值

<?= DetailView::widget([
    'model' => $model,

    'attributes' => [
        'id',
        [
            'attribute' => 'my_attribute',
            'visible' => !empty($model->my_attribute)
        ],
    ]
]);

这段代码真不错!工作很好,只有我会考虑<代码>(ISSET($Atgest[Value])和&属性[ [值] ]!= '' & & $属性[值] ``!''){< /代码>条件为“catch”。更多你想过滤掉的情况。过滤条件由你决定)相当酷。它似乎打破了一些细节,比如:
“updated\u at:datetime”,
只显示基础值,而不是转换后的值。