【问题标题】:Format Yii2 GridView column as a URL将 Yii2 GridView 列格式化为 URL
【发布时间】:2019-07-08 06:34:31
【问题描述】:

我需要将 GridView 的一列中的文本格式化为 URL,该 URL 将导航到该行记录的详细视图,而不是使用操作列中的“查看”按钮;似乎是一个非常普遍的要求。下面是现有的列定义,但我想将组织名称格式化为与操作列中的“查看”按钮相同的位置的 URL,即“应用程序/视图?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 中解决类似的问题,但显然它不够“相似”,因为我对此一无所知。 任何帮助将不胜感激!

【问题讨论】:

    标签: url gridview yii2


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

    【讨论】:

      【解决方案2】:

      下面是我目前使用的代码。 如果为“空值”,它将显示空单元格。如果用户有权访问查看页面,它将检查 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-&gt;user-&gt;can() 语句。

      【讨论】:

      • 非常有趣的解决方案。随着应用程序的运行,ACL 将首先阻止未经授权的用户访问索引页面,但这是一个很好的 sn-p 手头。非常感谢!
      【解决方案3】:

      下面的代码也可以。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多