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