【问题标题】:URL in Yii2 GridViewYii2 GridView 中的 URL
【发布时间】:2014-05-24 07:56:01
【问题描述】:

我有这个代码:

<?php echo GridView::widget([
  'dataProvider' => $dataProvider,
  'filterModel' => $searchModel,
  'columns' => [
    ['class' => 'yii\grid\SerialColumn'],
    [
       'label' => 'bla',
       'format' => 'url',
       'value' => function ($data) {
            return Html::url('site/index');
       },
    ],
    ['class' => 'yii\grid\ActionColumn'],
  ],
]); ?>

在网格视图中生成带有 URL 地址的文本。

/academia-new/advanced/admin/site/index

URL 工作正常,但如何设置链接文本?

【问题讨论】:

  • 您可能希望接受其中一个答案作为正确答案...? ;)

标签: php gridview yii yii2


【解决方案1】:

我从 yii 的贡献者 Samdark 那里得到了解决方案。需要使用格式=>'raw':

...    
'format' => 'raw',
     'value'=>function ($data) {
        return Html::a(Html::encode("View"),'site/index');
    },

需要使用 Html::encode() 来逃避 XSS

【讨论】:

    【解决方案2】:

    试试

    return Html::a('link_text','site/index');
    

    https://github.com/yiisoft/yii2/blob/master/framework/helpers/BaseHtml.php

    【讨论】:

      【解决方案3】:

      使用'format' =&gt; 'raw' 而不是'format' =&gt; 'url'

      【讨论】:

      • 如果你想用它发送一些数据怎么办?比如说一个整数..以及如何在控制器中检索它??
      • [ 'attribute' => 'invoice_id', 'format' => 'raw', 'value' => function ($model) { return Html::a($model->invoice_id, [ 'invoice/view', 'id' => $model->invoice_id ], ['target' => '_blank']); }, ],
      【解决方案4】:

      解决方案:

      <?=  GridView::widget([
             'dataProvider' => $dataProvider,
             'filterModel' => $searchModel,
             'columns' => [
             ['class' => 'yii\grid\SerialColumn'],
                   [
                   'label'=>'bla',
                   'format' => 'raw',
                   'value'=>function ($data) {
                              return Html::a(['site/index']);
                            },
                   ],
           ['class' => 'yii\grid\ActionColumn'],
        ],
      ]); ?>
      

      【讨论】:

      • 一些意图确实有助于提高答案的可读性
      • return Html::a(['site/index']) do not work in yii2 -> error, try return Html::a('link','site/index');
      【解决方案5】:

      我想我找到了解决方案:

      代码:

      'value'=>function ($data) {
              return Html::url('site/index');
          },
      

      应该稍作修改。假设你在数组'country'中的字段名称,那么代码应该是这样的:

      'value'=>function ($data) {
              return Html::a($data['country'], ['site/index']);
          },
      

      所以我使用 Html::a 而不是 Html::url 并将超链接的值添加为 $data['country']。 希望这会有所帮助。

      【讨论】:

        【解决方案6】:

        使用原始格式

        <?php echo GridView::widget([
          'dataProvider' => $dataProvider,
          'filterModel' => $searchModel,
          'columns' => [
            ['class' => 'yii\grid\SerialColumn'],
            [
                   'label'=>'url',
                   'format' => 'raw',
               'value'=>function ($data) {
                    return Html::a('there is your label',['site/index']);
                },
            ],
            ['class' => 'yii\grid\ActionColumn'],
        ],
        ]); ?>
        

        【讨论】:

          【解决方案7】:

          试试下面的代码。

          GridView::widget([
              'dataProvider' => $dataProvider,
              'rowOptions'   => function ($model, $index, $widget, $grid) {
          
              return [
              'id' => $model['id'], 
              'onclick' => 'location.href="'
              . Yii::$app->urlManager->createUrl('controllerName/view') 
              . '?id="+(this.id);'
              ];
              },
              ...
          ])
          

          【讨论】:

          • 这看起来不像是有效的 PHP 代码。您能否突出显示对解决原始问题至关重要的部分?
          【解决方案8】:

          如果您需要将属性设置为标签,请尝试这个:

          [
           'label'=>'' ,
           'header'=>Yii::t('app', 'Sample Number'),
           'attribute'=>'sample_number',  
                            'width'=>'310px',
                            'value' => function ($model) {
                                    return Html::a(Html::encode( $model->sample_number), 
                                    Url::to(['controller/action', 'sample_number' => $model->sample_number]));
                                },
           'format' => 'raw',     
           'options'=>['class'=>'success','style'=>'font-weight:bold;'],
          ],
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-25
            • 1970-01-01
            • 1970-01-01
            • 2019-10-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多