更改 DetailView 小部件中的属性值
Posted
技术标签:
【中文标题】更改 DetailView 小部件中的属性值【英文标题】:Changing value of an attribute in DetailView widget 【发布时间】:2015-04-02 17:08:45 【问题描述】:我有一个名为 Play 的表,我在 Yii2 详细视图小部件中显示每条记录的详细信息。我在该表中有一个属性 recurring
,它的类型是 tinyint,它可以是 0 或 1。但我不想将其视为一个数字,而是我想显示 yes
或 no
基于值(0 或 1)。
我正在尝试使用 detailview 小部件中的功能来更改它,但出现错误:Object of class Closure could not be converted to string
我的详细查看代码:
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'name',
'max_people_count',
'type',
[
'attribute' => 'recurring',
'format'=>'raw',
'value'=> function ($model)
if($model->recurring == 1)
return 'yes';
else
return 'no';
,
],
'day',
'time',
...
任何帮助将不胜感激!
【问题讨论】:
取自类似问题:Closures in DetailView 【参考方案1】:与处理一组模型的GridView
不同,DetailView
只处理一个模型。所以没有必要使用闭包,因为$model
是唯一一个用于显示的模型,并且可以作为变量在视图中使用。
rkm建议你绝对可以使用solution,但是还有更简单的选择。
顺便说一下,您可以稍微简化一下条件,因为允许的值只有0
和1
:
'value' => $model->recurring ? 'yes' : 'no'
如果你只想将值显示为布尔值,你可以添加带有冒号的格式化程序后缀:
'recurring:boolean',
'format' => 'raw'
在这里是多余的,因为它只是没有 html 的文本。
如果你想添加更多选项,你可以使用这个:
[
'attribute' => 'recurring',
'format' => 'boolean',
// Other options
],
使用格式化程序更灵活,因为这些标签将根据配置中设置的应用程序语言生成。
官方文档:
DetailView $attributes property
Formatter class
Formatter asBoolean() method
另见this question,和你的很相似。
【讨论】:
这也非常有用,因为我将用多种语言制作这个应用程序,谢谢!【参考方案2】:试试
'value' => $model->recurring == 1 ? 'yes' : 'no'
【讨论】:
以上是关于更改 DetailView 小部件中的属性值的主要内容,如果未能解决你的问题,请参考以下文章
Yii2框架学习 3-3 单条数据详情展示; 小部件 DetailView的使用 ; 数据关联查询时 hasOne和hasMany
yii框架里DetailView视图和GridView的区别