我无法弄清楚如何修改\yii2\vendor\yiisoft\yii2\grid\GridView.php
以使国家模型的字段name
在官方教程中被视为关于gii的国家/地区视图的链接。
我尝试使用renderTableRow()
,但我无法找到可以在哪里制作这样的低代码:
if (ThisFieldModel == name) makeItsTextAsLink(text, url)
public function renderTableRow($model, $key, $index)
{
$cells = [];
/* @var $column Column */
foreach ($this->columns as $column) {
$cells[] = $column->renderDataCell($model, $key, $index);
}
if ($this->rowOptions instanceof Closure) {
$options = call_user_func($this->rowOptions, $model, $key, $index, $this);
} else {
$options = $this->rowOptions;
}
$options['data-key'] = is_array($key) ? json_encode($key) : (string) $key;
return Html::tag('tr', implode('', $cells), $options);
}
另一个问题:我在哪里可以复制\yii2\vendor\yiisoft\yii2\grid\GridView.php
来修改它并使用它而不影响yii的核心。
答案 0 :(得分:3)
最后我找到了解决方案,可以从小部件调用中自定义列,因此我们不需要对小部件的核心代码进行任何修改或创建新的小部件,如下所示:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'code',
[ 'attribute' => 'name', 'format' => 'raw', 'value' => function($data){return "<a href=\"?r=country/view&id={$data->code}\">{$data->name}</a>";}],
'population',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
解决方案的基础取决于窗口小部件的columns
属性,此处我使用
name
之后的code
[ 'attribute' => 'name', 'format' => 'raw', 'value' => function($data){return "<a href=\"?r=country/view&id={$data->code}\">{$data->name}</a>";}],
注意格式化字段值的回调函数。