在DetailView中过滤空值

时间:2015-06-29 07:49:51

标签: yii yii2 detailview

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

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

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

enter image description here

2 个答案:

答案 0 :(得分:4)

您可以将 DetailView 小部件的template参数定义为具有以下签名function ($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
]);

答案 1 :(得分:1)

类似的东西会更好吗?它保留了诸如updated_at:datetime之类的一些细微之处,使用上面的一种解决方案将只显示基础值,而不是转换后的值。

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

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