Как исключить свойство CActiveRecord из фильтрации с CGridView в Yii?

В приложении Yii 1.1 я отображаю данные таблицы, используя CGridView,

$dataProvider = $model->search();
$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'my-grid',
    'dataProvider' => $dataProvider,
    'filter' => $model,
    'columns' => array(
        'id',
        'user.firstname',
        'user.lastname',
        'user.email',
        'type',
        'foo', // <-- on-the-fly added attribute
        'bar', // <-- on-the-fly added attribute
        ...
    ),
));

Curretly все столбцы таблицы модели (id, type) и даже на лету добавленные атрибуты (foo, bar) получить поле ввода фильтра. (Фильтры дополнительных свойств не работают.)

Я хочу иметь фильтры только для некоторых полей, ред id а также tipe, Как я могу включить только те фильтры, которые мне нужны / отключить фильтры, которые мне не нужны?

1 ответ

Вот решение, которое выглядит как обходной путь - просто определите нефильтрованные свойства явно и установите filter параметр для каждого false:

...
$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'my-grid',
    'dataProvider' => $dataProvider,
    'filter' => $model,
    'columns' => array(
        'id',
        ...
        'type',
        array(
            'name' => 'foo',
            'filter' => false,
        ),
        array(
            'name' => 'bar',
            'filter' => false,
        ),
        ...
    ),
));

Это работает, но я думаю, должно быть более элегантное решение...

Другие вопросы по тегам