在 DetailView 中过滤空值
Filter empty values in DetailView
有没有一种简单的方法可以强制 Yii2 中的 DetailView
忽略其 attributes
列表中的这些字段,特别是 model
是空的?
或者唯一的方法是在 attributes
列表上用自己的函数定义 every 属性并过滤其中的空字段(听起来有点疯狂)?
编辑:我认为,这是不言自明的,但事实证明并非如此。所以,基本上,我想强制 DetailView
忽略(不呈现)attributes
列表中这些元素的行,这些元素在相应的 model
中具有空(空,空字符串)值,因此将导致呈现空 table 单元格:
您可以将 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
]);
这样的东西会更好吗?它保留了一些细节,例如:updated_at:datetime
,使用上面的解决方案之一将只显示基础值,而不是转换后的值。
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
[
'attribute' => 'my_attribute',
'visible' => !empty($model->my_attribute)
],
]
]);
有没有一种简单的方法可以强制 Yii2 中的 DetailView
忽略其 attributes
列表中的这些字段,特别是 model
是空的?
或者唯一的方法是在 attributes
列表上用自己的函数定义 every 属性并过滤其中的空字段(听起来有点疯狂)?
编辑:我认为,这是不言自明的,但事实证明并非如此。所以,基本上,我想强制 DetailView
忽略(不呈现)attributes
列表中这些元素的行,这些元素在相应的 model
中具有空(空,空字符串)值,因此将导致呈现空 table 单元格:
您可以将 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
]);
这样的东西会更好吗?它保留了一些细节,例如:updated_at:datetime
,使用上面的解决方案之一将只显示基础值,而不是转换后的值。
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
[
'attribute' => 'my_attribute',
'visible' => !empty($model->my_attribute)
],
]
]);