Yii1 CGridView (Yii-Booster): как изменить ключ фильтра (filterVal) в TbGridView (на основе CGridView)?

Я использую yii-booster(4.0.1) TbGridView(расширяет CGridView) и мне нужно изменить имя переменной фильтра в _REQUEST($_POST, $_GET) для функции фильтра. В моей сетке у меня есть функция фильтра, и когда я нажимаю ввод после ввода некоторых слов в поле ввода фильтра, на сервер будет отправлен запрос ajax. в этом запросе в $_REQUEST у меня есть:

array
(
    'page' => '1'
    'wsi_it_model_Asset' => array
    (
        'user' => 'eghlima'
        'createdAt' => ''
        'serial' => ''
        'brand' => ''
        'model' => ''
        'assetType' => ''
        'assigned' => ''
        'location' => ''
        'status' => ''
    )
)

Мой вопрос заключается в том, как я могу изменить wsi_it_model_Asset в запросе, созданном CGridView. Я знаю, что должен сделать это через параметр в CActiveDataProvider при создании dataProvider, но не могу его найти.

Заранее спасибо.

ОБНОВЛЕНИЕ 24 января
Я нашел свой код из другого проекта, как видите, я могу изменить key на sort и pagination, мне нужно что-то вроде ключа фильтрации;

return new \CActiveDataProvider($this->applicant, array(
            'criteria' => $criteria,
            'pagination' => array(
                'pageVar' => 'p', // <<<<< pagination var
                'pageSize' => 20,
            ),
            'sort' => array(
                'sortVar' => 's', // <<<<< sorting var
                'defaultOrder' => 't.firstName ASC',
                'attributes' => array(
                    '*'
                )

            ),
        ));

Таким образом, для разбиения на страницы запрос, который отправляется от клиента к серверу, будет:

array
(
    'p' => '7' // <<<<<< page changed to `p`
    'wsi_it_model_Asset' => array
    (
        'user' => 'eghlima'
        'createdAt' => ''
        'serial' => ''
        'brand' => ''
        'model' => ''
        'assetType' => ''
        'assigned' => ''
        'location' => ''
        'status' => ''
    )
)

person Mohammad Eghlima    schedule 03.01.2016    source источник


Ответы (1)


Я не уверен, что вы имеете в виду, но я попробую.

$this->widget('zii.widgets.grid.CGridView', array(
    'id' => 'my-grid',
    'dataProvider' => $model->search(),
    'filter' => $model,
    'columns' => array(
        array(
            'value' => '$data->theValue',
            'filter' => CHtml::activeTextField($model, 'myWish'),
        ),
    )
));

И затем в вашей модели вы добавляете виртуальный атрибут

public function getMyWish()
   {
      return 'Your dream answere';
   }

И в вашем $model->search() добавьте:

$criteria->compare('$data->theValue', $this->myWish,true);

Что-то вроде этого, проверьте очень хороший учебник по виртуальным атрибутам: http://www.yiiframework.com/wiki/167/understanding-virtual-attributes-and-get-set-methods/

person jonascw    schedule 08.01.2016
comment
нет, это не ответ. Смотреть; вы написали: 'filter' => CHtml::activeTextField($model, 'myWish'), когда вы используете модель в yii1, она использует имя класса для элемента, и в моем случае это Asset с пространством имен wsi\it\model , поэтому yii1 выберет wsi_it_model_Asset в качестве префикса для имени и идентификатора элемента, и всякий раз, когда он захочет отправить запрос, все параметры будут иметь этот префикс. но я уверен, должно быть решение для изменения этой переменной! - person Mohammad Eghlima; 08.01.2016