在文档和谷歌周围都找不到。
我像这样渲染表格的小部件:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'last_name',
'available',
['class' => 'yii\grid\ActionColumn'],
],
然后呈现这样一个表:
...
<tr>
<td>Some last name</td>
<td>1</td>
</tr>
..
正如您可能已经猜到的那样,available
代表一个布尔值。它可以是0或1.但我不想这样显示它。我希望1变为'是',0变为'否'。
那么我该如何对该列进行str_replace(array('1', '0'), array('Yes', 'No'))
?
答案 0 :(得分:2)
无需编写开关,str_replace
或其他复杂内容。
最简洁的方式是:
'available:boolean',
相当于:
[
'attribute' => 'available',
'format' => 'boolean',
],
如果您想要更详细的列配置,请使用后者。
此方法的主要优点是formatter将用于显示布尔值,显示的文本将取决于在应用程序配置中设置的源语言。所以它基本上是你的国际化。
在编写str_replace
之类的内容之前,先了解框架的可能性。
官方文档:
P.S。顺便说一下this question已经涵盖了这一点。
答案 1 :(得分:1)
根据documentation for the DataColumn,您可以为列设置匿名函数。这样,您可以格式化列数据,或做任何适合您的事情。例如:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'last_name',
[
'attribute' => 'available',
'value' => function($data){return $data->available == true ? 'Yes': 'No';},
]
['class' => 'yii\grid\ActionColumn'],
],
请注意,$data
变量是$dataProvider
中一个项目的模型,因此您可以从该模型访问任何内容。
答案 2 :(得分:0)
您可以使用切换功能
switch($value){
case '1':
$value = 'Yes';
break;
case '0':
$value = 'No';
break;
default:
$value = $value;
;
这可以解决您的问题。
答案 3 :(得分:0)
您可以使用功能
[
'attribute' => 'attivo',
'label' => 'Attivo',
'value' => function($model, $index, $dataColumn) {
switch ($model->attivo) {
case '0':
return 'Not';
break;
case '1':
return 'Yes';
break;
}
},
'contentOptions' => ['style' => 'width:90px;'],
'filter' => [ '1' => 'Yes', '0'=>'Not'],
],