如何修改Yii2 gridview

时间:2014-12-15 14:42:08

标签: php yii2

我无法弄清楚如何修改\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的核心。

1 个答案:

答案 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>";}],

注意格式化字段值的回调函数。