过滤DetailView中的空值

问题描述 投票:2回答:2

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

或者唯一的方法是使用自己的功能在attributes列表上定义every属性,并过滤其中的空白字段(听起来有点疯狂)?

Edit:我认为这很不言自明,但事实并非如此。因此,基本上,我想强制DetailView忽略(不渲染)attributes列表的这些元素的行,这些行在对应的model中具有空(空,空字符串)值,因此将导致呈现空表单元格:

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9TWmZjWi5wbmcifQ==” alt =“在此处输入图像描述”>

yii yii2 detailview
2个回答
5
投票

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

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
投票

这样的工作效果更好吗?它保留了一些细节,例如:updated_at:datetime,使用上述解决方案之一将只显示基础价值,而不是转换后的价值。

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

    'attributes' => [
        'id',
        [
            'attribute' => 'my_attribute',
            'visible' => !empty($model->my_attribute)
        ],
    ]
]);
© www.soinside.com 2019 - 2024. All rights reserved.