我有一个带有CGrideView的管理页面,但是当我想更改我的按钮列以添加一些其他按钮时会出现此错误:CButtonColumn及其行为没有名为“getId”的方法或闭包。
管理员行动:
public function actionAdmin()
{
$model=new Block('search');
$model->unsetAttributes(); // clear any default values
if (isset($_GET['Block'])) {
$model->attributes=$_GET['Block'];
}
$this->render('admin',array(
'model'=>$model,
));
}
管理员视图:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'block-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'name',
'content',
'type',
'enable',
array(
'class'=>'CButtonColumn',
'template' => '{view}{update}',
'buttons' => array(
'update' => array(
'url' => 'Yii::app()->controller->createUrl("update", array("name"=>$data->name))'
),
'view' => array(
'url'=>'CController::createUrl("view", array("name"=>$data->name))'
),
),
),
)));
答案 0 :(得分:1)
解决了!原因在于:
'view'=>array(
'url'=>'CController::createUrl("view",array("name"=>$data->name))'
),
它应该是:
'view'=>array(
'url'=>'Yii::app()->controller->createUrl("view", array("name"=>$data->name))'
),
为什么? 因为(): 因为Yii :: app() - >控制器它是当前应用程序的实例控制器。控制器具有私有$ _id属性。 CController :: createUrl它只是静态方法。在方法createUrl()中调用方法$ this-> getId(),但是当你调用静态方法实例时没有创建 - @ DanilaGanchar。
所以在CController :: createUrl中它无法找到控制器的id,并且我应该给它参数像这样CController :: createUrl(“/ page / view”,array(“name”=> $ data-> name))我现在尝试并且工作
答案 1 :(得分:0)
template
中元素的顺序必须等于buttons
中元素的顺序。您{view}{update}
为template
,但您先定义了update
按钮!所以我认为将'template'=>'{view}{update}'
更改为'template'=>'{update}{view}'
可能会解决您的问题。