Как добавить расширение select2 в качестве фильтра в CGridView на Yii

Я пытаюсь добавить в один столбец CGridView фильтр с расширением select2 после этого ответа, но не работает.

Мой код:

В виду vehicleulos / admin.php

<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'vehiculos-grid', 'dataProvider'=>$model->search(), 'filter'=>$model, 'columns'=>array( 'id', 'placa', array( 'name'=>'asociado_id', 'value'=>'Vehiculos::model()->getListNombreCompleto()', 'type'=>'html', ), 'modelo', 'color', array( 'class'=>'CButtonColumn', ), ))); 

В модели vehicleulos.php

 public function getListNombreCompleto() { $nombreCompleto = Contactos::model()->findAll(); $data = array(); foreach ($nombreCompleto as $contacto) { $data[$contacto->id] = $contacto->nombre; } $this->widget('ext.select2.ESelect2',array( 'name'=>'asociado_id', 'data'=>$data, 'htmlOptions'=>array( ), )); } 

Ошибка отображения CException:

 Vehiculos and its behaviors do not have a method or closure named "widget". 

Нет необходимости извлекать виджет из метода контроллера

В столбце gridview

 array( 'name'=>'asociado_id', 'value'=>'Vehiculos::model()->getListNombreCompleto()', 'filter' => $this->widget('ext.select2.ESelect2',array( 'name'=>'asociado_id', 'data'=>$select2_options, ), true) ), 

Я создал класс, расширяющий CDataColumn, чтобы добавить фильтр в столбец:

 Yii::import('zii.widgets.grid.CDataColumn'); class TbTableDeviceType extends CDataColumn { public $model; public $fieldName; public function init() { $ajaxUpdate = $this->grid->afterAjaxUpdate; $this->grid->afterAjaxUpdate = "function(id,data){'.$ajaxUpdate.' $('#" . get_class($this->model) . "_" . $this->fieldName . "').select2({placeholder:' ', allowClear: true}); }"; } /** * Renders the filter cell. */ public function renderFilterCell() { echo '<td><div class="filter-container">'; $deviceTypes = Helper::getDeviceTypesArray(); $deviceTypes[''] = ''; // Translate::t('globals', '-- all --'); asort($deviceTypes); $this->filter = $deviceTypes; $model = $this->model; $field = $this->fieldName; if (empty($model->$field)) echo CHtml::dropDownList(get_class($this->model) . '[' . $this- >fieldName . ']', $this->fieldName, $deviceTypes); else echo CHtml::dropDownList(get_class($this->model) . '[' . $this->fieldName . ']', $this->fieldName, $deviceTypes, array( 'options' => array( $model->$field => array( 'selected' => true ) ) )); Yii::app()->controller->widget('ext.ESelect2.ESelect2', array( 'selector' => '#' . get_class($this->model) . '_' . $this- >fieldName, 'data' => $deviceTypes, 'options' => array( 'placeholder' => ' ', 'allowClear' => true ), 'htmlOptions' => array( 'minimumInputLength' => 2, 'style' => 'width:100%' ) )); echo '</div></td>'; } } 

И затем вы добавляете этот столбец в свой cgridview:

 array( 'class' => 'ext.widgets.TbTableDeviceType', 'model' => $model, 'fieldName' => 'deviceType_id', 'name' => 'deviceType_id', ),