Yii从其他小部件调用CButtonColumn

Yii从其他小部件调用CButtonColumn,yii,cgridview,cbuttoncolumn,Yii,Cgridview,Cbuttoncolumn,我已经创建了一个新的小部件来在管理视图中显示信息。最终视图必须与CGridView相同,但列的逻辑不同。除了我尝试调用CButtonColumn列之外,其他一切都正常工作 foreach ($this->columns as $column) { if (is_array($column) && isset($column['class']) { $this->renderColumnWidget($column); } } /

我已经创建了一个新的小部件来在管理视图中显示信息。最终视图必须与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
}
所以基本上这里我检查列中是否有class属性,并调用该小部件。但我得到一个错误:
CButtonColumn及其行为没有名为“run”的方法或闭包。


我做错了什么?CButtonColumn没有
run
方法,我不想扩展这个类。

您可以将它作为一个函数来启动列

    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();
    }