将 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',
],
我需要将 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',
],