yii2 gridview中的URL

时间:2014-04-10 14:26:13

标签: php gridview yii yii2

在yii2 gridview中,我有这段代码:

<?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地址生成文本。

/学术界-新的/先进/管理/站点/索引

Url工作正常,但如何为链接设置文字?

8 个答案:

答案 0 :(得分:59)

使用'format' => 'raw'代替'format' => 'url'

答案 1 :(得分:24)

我从yii的贡献者Samdark那里得到了解决方案。需要使用format =&gt;&#39; raw&#39;:

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

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

答案 2 :(得分:9)

溶液:

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

答案 3 :(得分:4)

尝试

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

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

答案 4 :(得分:3)

使用原始格式

<?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'],
],
]); ?>

答案 5 :(得分:2)

我想我得到了解决方案:

代码:

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

应该稍微修改一下。我们在数组&#39; country&#39;中说出您的字段名称,然后代码应该是这样的:

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

因此,我使用 Html :: a 代替 Html :: url ,并将超链接的值添加为 $ data [&#39; country&#39 ] 。 希望这会有所帮助。

答案 6 :(得分:0)

如果您需要将属性设置为label,请尝试以下方法:

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

答案 7 :(得分:-1)

尝试以下代码。

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);'
    ];
    },
    ...
])