将Yii2 GridView列的格式设置为URL

时间:2019-07-08 06:34:31

标签: url gridview yii2

我需要将GridView的一列中的文本设置为URL格式,该URL可以导航到该行记录的详细视图,而不是使用action列中的“ View”按钮;似乎是一个非常普遍的要求。下面是现有的列定义,但是我想将organization_name设置为URL的格式,使其与动作列中“查看”按钮的位置相同,该位置为“ application / view?id =”,并具有id列的值

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'columns' => [
        'id',
        'organization_name:text:Organization',
        'address1:text:Address',
        'city',
        'state',
        'status',
        'fullName',

        ['class' => 'yii\grid\ActionColumn',
            'visibleButtons' => ['delete' => false]
        ],
    ],
]); ?>

我已经在StackOverflow中尝试过类似的问题,但是显然这还不够“相似”,因为我对此一无所知。 任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:6)

[
     'attribute' => 'organization_name',
     'value' => function ($model) {
          return Html::a(
              $model->organization_name,
              ['view', 'id' => $model->id],
              [
                 'title' => 'View',
              ]
          );
      },
      'format' => 'raw',
],

答案 1 :(得分:1)

以下是我当前正在使用的代码。 如果为“空值”,它将显示空白单元格。如果用户有权访问视图页面,它将检查ACL并显示链接,或者如果用户没有权限,它将仅显示组织名称。

...
'id',
// 'organization_name:text:Organization',
[
    'attribute' => 'organization_name',
    'label' => 'Organization',
    'format' => 'raw',
    'value' => function ($dataProvider) {
        $name = isset($dataProvider->organization_name) ? $dataProvider->organization_name : '';
        $id = isset($dataProvider->id) ? $dataProvider->id : '';
        if($name && $id){
            if(\Yii::$app->user->can('application/view')){
                $name = Html::a($name, ['application/view', 'id' => $id], ['class' => '']);
            }
            return $name;
        }
     },
],
...

如果尚未实现ACL,则可以删除$app->user->can()语句。

答案 2 :(得分:0)

下面的代码也将起作用。

[
    'format' => 'raw',
     'value' => function ($dataProvider) {
      $organization_name = isset($dataProvider->organization_name) ? $dataProvider->organization_name : '';
     $id = isset($dataProvider->id) ? $dataProvider->id : '';
     if ($organization_name && $id) {
         if(Yii::$app->user->can('application/view')){
           $organization_name = Html::a($organization_name, ['application/view', 'id' => $id], ['class' => '','target'=>'_blank',]);
          }
           return $organization_name;
        }
     },
    'label' => 'Organization',
],