我需要将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中尝试过类似的问题,但是显然这还不够“相似”,因为我对此一无所知。 任何帮助将不胜感激!
答案 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',
],