Yii2 GridView 中的 URL

Posted

技术标签:

【中文标题】Yii2 GridView 中的 URL【英文标题】:URL in Yii2 GridView 【发布时间】: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 工作正常,但如何设置链接文本?

【问题讨论】:

您可能希望接受其中一个答案作为正确答案...? ;) 【参考方案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;'],
],

【讨论】:

以上是关于Yii2 GridView 中的 URL的主要内容,如果未能解决你的问题,请参考以下文章

Yii2:Gridview过滤器中的kartik\Select2下拉列表

GridView中的Yii2下拉列表筛选器

Yii2 - Gridview 播放下一首歌曲

不加载kartik 的select2 作为GridView 中的过滤器。 Yii2

Yii2的Gridview应用技巧补充

如何在yii2 gridview中为大数据表显示一行中的表头名称