Yii2:如何对列的值执行str_replace()?

时间:2015-05-15 15:01:01

标签: php yii2

在文档和谷歌周围都找不到。

我像这样渲染表格的小部件:

<?= 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'))

4 个答案:

答案 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'],
        ],