Yii2 GridView中的URL

49

我有这段代码:

<?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没有问题,但我怎样设置链接的文本?


你可能想要接受其中一个答案作为正确答案...? ;) - benomatis
8个回答

67

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


如果您想发送一些数据,比如一个整数,该怎么办?在控制器中如何检索它? - Uzumaki Naruto
1
[ '属性' => 'invoice_id', '格式' => '原始', '数值' => function ($model) { return Html::a($model->invoice_id, [ 'invoice/view', 'id' => $model->invoice_id ], ['target' => '_blank']); }, ], - Andreas Hinderberger

27

我从 Yii 的贡献者 Samdark 那里得到了解决方案,需要使用 format=>'raw':

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

需要使用Html::encode()来转义XSS


10

解决方案:

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

一些缩进确实会提高您的答案的可读性。 - FrederikNS
2
在 Yii2 中,return Html::a(['site/index']) 不起作用并会报错,您可以尝试使用 return Html::a('link','site/index');。 - Viktors

5
使用原始格式。
<?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'],
],
]); ?>

4

3
我认为我已经找到了解决方案: 代码如下:
'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']。 希望这可以帮助你。

0

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

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

-2

尝试下面的代码。

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代码。您能否突出显示解决原始问题所必需的部分? - Nico Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接