Yii вызывает CButtonColumn из другого виджета

Я создал новый виджет для отображения информации в режиме администратора. Окончательное представление должно быть таким же, как CGridView, но с другой логикой для столбцов. Все работает нормально, за исключением случаев, когда я пытаюсь вызвать столбец CButtonColumn.

foreach ($this->columns as $column) {
     if (is_array($column) && isset($column['class']) {
         $this->renderColumnWidget($column);
     }
}

/* ... */

protected function renderColumnWidget($column)
{
    $widgetClass = $column->class;
    unset($column->class);
    if (strpos($widgetClass, '.') === false) {
        $widgetClass = 'zii.widgets.grid.'.$widgetClass;
    }

    $this->widget($widgetClass, $column); // Error from here
}

Итак, в основном здесь я проверяю, есть ли атрибут класса в столбце, и вызываю этот виджет. Но получаю ошибку: CButtonColumn and its behaviors do not have a method or closure named "run".

Что я делаю неправильно? CButtonColumn не имеет метода run, и я не хочу расширять этот класс.


person Justinas    schedule 20.05.2014    source источник


Ответы (1)


Вы это как функция, подобная этой, чтобы инициировать ваши столбцы

    protected function initColumns(){
        foreach($this->columns as $i=>$column) {
            if(is_string($column))
                $column=$this->createDataColumn($column);
            else {
                if(!isset($column['class']))
                    $column['class']='CDataColumn';
                $column=Yii::createComponent($column, $this);
            }
            if($column->id===null)
                $column->id=$id.'_c'.$i;
            $this->columns[$i]=$column;
        }
        foreach($this->columns as $column)
            $column->init();
    }
person Manquer    schedule 20.05.2014