将 Yii2 GridView 列格式化为 URL

Format Yii2 GridView column as a URL

我需要将 GridView 的一列中的文本格式化为 URL 以导航到该行记录的详细视图,而不是使用操作列中的 'View' 按钮;似乎是一个非常普遍的要求。下面是现有的列定义,但我想将 organization_name 格式化为 URL 到与操作列中的 'View' 按钮相同的位置,即 '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]
        ],
    ],
]); ?>

我曾尝试在 Whosebug 中解决类似的问题,但显然 "similar" 还不够,因为我一无所获。 非常感谢任何帮助!

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

下面是我目前使用的代码。 如果 'null value',它将显示空单元格。它将检查 ACL,如果用户有访问视图页面的权限,将显示 link,如果用户没有权限,它将只显示组织名称。

...
'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() 语句。

下面的代码也可以。

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