Форматировать столбец Yii2 GridView как URL - PullRequest
1 голос
/ 08 июля 2019

Мне нужно отформатировать текст в одном столбце GridView в виде URL-адреса, который будет переходить к подробному представлению записи этой строки вместо использования кнопки «Вид» в столбце действий;кажется, что-то, что было бы действительно распространенным требованием.Ниже приведены существующие определения столбцов, но я хочу отформатировать имя_организации как 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 ]

6 голосов
/ 08 июля 2019
[
     'attribute' => 'organization_name',
     'value' => function ($model) {
          return Html::a(
              $model->organization_name,
              ['view', 'id' => $model->id],
              [
                 'title' => 'View',
              ]
          );
      },
      'format' => 'raw',
],
1 голос
/ 08 июля 2019

Ниже приведен код, который я сейчас использую.В случае «нулевого значения» будет отображаться пустая ячейка.Он проверит 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;
        }
     },
],
...

Вы можете удалить оператор $app->user->can(), если вы не внедрили ACL.

0 голосов
/ 08 июля 2019

Ниже код также будет работать.

[
    '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',
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...