【问题标题】:Yii2 : How to do str_replace() on column's value?Yii2:如何对列的值执行 str_replace()?
【发布时间】:2015-05-15 15:01:01
【问题描述】:

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

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

<?= 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')) 在那一栏??

【问题讨论】:

    标签: php yii2


    【解决方案1】:

    无需编写开关,str_replace 或其他复杂的东西。

    最简洁的方式是:

    'available:boolean',
    

    相当于:

    [
        'attribute' => 'available',
        'format' => 'boolean',
    ],
    

    如果您想要更详细的列配置,请使用后者。

    此方法的主要优点是格式化程序将用于显示布尔值,显示的文本将取决于应用程序配置中设置的源语言。所以这对你来说基本上是国际化。

    在编写 str_replace 之类的内容之前了解框架的可能性。

    官方文档:

    P.S.顺便说一句,this question 已经介绍了这一点。

    【讨论】:

      【解决方案2】:

      根据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 中一项的模型,因此您可以从该模型中访问任何您想要的内容。

      【讨论】:

        【解决方案3】:

        你可以使用开关功能

        switch($value){
           case '1':
             $value = 'Yes';
             break;
           case '0':
             $value = 'No';
             break;
           default:
             $value = $value;
         ;
        

        这应该可以解决您的问题。

        【讨论】:

          【解决方案4】:

          你可以使用函数

                   [
                      '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'],
                  ],
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-28
            • 2013-01-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多