yii 在DetailView中筛选空值

mw3dktmi  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(139)

有没有一种简单的方法可以强制Yii2中的DetailView忽略它的attributes列表中的这些字段,这些字段对于特定的model是空的?
或者唯一的方法是用自己的函数定义attributes列表上的 every 属性,并过滤其中的空字段(听起来有点疯狂)?

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

q8l4jmvw

q8l4jmvw1#

您可以将 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
]);
ibrsph3r

ibrsph3r2#

像这样的东西会更好吗?它保留了一些细节,比如:updated_at:datetime,使用上述解决方案之一将只显示基础值,而不是转换后的值。

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

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

相关问题