How do I set a default configuration for GridView in Yii2 without the widget factory?

php, yii2

Solution

You can use Yii::$container->set().

For example:

// add following line in config/web.php and config/console.php
require __DIR__ . '/container.php';

// creates a config/container.php file and add following
\Yii::$container->set('yii\grid\GridView', [
    'tableOptions' => [
        'class' => 'table table-condensed',
    ],
]);

For more information: Dependency Injection Container and Practical Usage

and Yii::$objectConfig has been removed in Yii 2.0.0-beta.

For example (Since version 2.0.11):

$config = [
    'id' => 'basic',
    // ...
    'container' => [
        'definitions' => [
            yii\grid\GridView::class => [
                'tableOptions' => [
                    'class' => 'table table-condensed',
                ],
            ],
        ],
    ],
];

For more information: Application Configurations

Problem

This is what a gridview looks like in Yii2: ``` <?php echo GridView::widget([ 'dataProvider' => $dataProvider, 'filterModel' => $searchModel, 'columns' => [ ['class' => 'yii\grid\SerialColumn'], ... ['class' => 'yii\grid\ActionColumn'], ], ]); ?> ``` I want change my grids a little bit, so I add this line: ``` tableOptions'=>['class'=>'table table-condensed'], ``` This works great, but... I want this to be the default value for all my grids! In Yii 1, this would look like this: ``` 'widgetFactory' => array( 'widgets' => array( 'CGridView' => array( 'htmlOptions' => ['class'=>'table table-condensed'] ), ), ), ``` In Yii2 however there is no widget factory. Instead, looking at the main config, I would expect this to work: ``` 'grid'=>[ 'class' => 'yii\grid\GridView', 'tableOptions'=>['class'=>'table table-condensed'], ], ``` But it does not. So what am I doing wrong? Any hints much appreciated. Thanks!

Original source