Yii2.0.53中如何正确配置GridView全局选项?
Yii2.0.53 GridView全局配置不生效的解决办法
你的当前配置方式存在问题,导致GridView的全局选项未生效,以下是问题分析和修复方案:
问题原因
你在DI容器中配置GridView的类名写法存在隐患,字符串形式的类名容易出现拼写或转义错误,导致容器配置无法匹配到目标类;另外若代码中存在直接实例化GridView的场景(而非通过GridView::widget()或Yii::createObject()),也会跳过DI容器的配置。
正确配置方案
方案一:修正DI容器的类名配置
在config/main.php中,使用PHP的::class常量定义类名,避免字符串拼写错误,同时确保配置项正确:
'container' => [ 'definitions' => [ yii\grid\GridView::class => [ 'tableOptions' => ['class' => 'table table-sm table-striped table-bordered'], 'layout' => '{summary}\n{pager}\n{items}\n{summary}\n{pager}', ], yii\widgets\LinkPager::class => [ 'maxButtonCount' => 5, 'pageCssClass' => 'page-item', 'linkOptions' => ['class' => 'page-link'], 'firstPageCssClass' => 'page-item', // 补充剩余配置项 ], ], ],
注意:
- 所有使用GridView的代码必须通过
GridView::widget($config)或Yii::createObject()创建实例,禁止直接使用new GridView($config) - 若开启了配置缓存,需清除缓存后重新加载应用
方案二:自定义GridView类(更稳定可靠)
如果DI容器配置仍不生效,推荐创建自定义GridView类来覆盖默认配置:
- 在
app/components目录下新建GridView.php:
<?php namespace app\components; use yii\grid\GridView as BaseGridView; class GridView extends BaseGridView { // 定义默认配置 public $tableOptions = ['class' => 'table table-sm table-striped table-bordered']; public $layout = '{summary}\n{pager}\n{items}\n{summary}\n{pager}'; }
- 在
config/main.php的DI容器中替换原GridView类:
'container' => [ 'definitions' => [ // 用自定义类替换原生GridView yii\grid\GridView::class => app\components\GridView::class, // LinkPager的配置保留 yii\widgets\LinkPager::class => [ 'maxButtonCount' => 5, 'pageCssClass' => 'page-item', 'linkOptions' => ['class' => 'page-link'], 'firstPageCssClass' => 'page-item', // 补充剩余配置项 ], ], ],
这种方式无论使用GridView::widget()还是直接实例化,都会应用自定义类的默认配置,适配场景更广泛。
内容的提问来源于stack exchange,提问作者JKofsky
相关产品推荐
相关产品推荐

