У меня есть страница администратора с 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))'
),
),
),
)));
решена! причина в:
'view'=>array(
'url'=>'CController::createUrl("view",array("name"=>$data->name))'
),
так должно быть :
'view'=>array(
'url'=>'Yii::app()->controller->createUrl("view", array("name"=>$data->name))'
),
и почему ?
так как ():
Потому что Yii :: app () -> controller это экземпляр Controller текущего приложения. Контроллер имеет свойство private $ _id. CController :: createUrl это просто статический метод. В методе createUrl () вызывается метод $ this-> getId (), но при вызове статического метода экземпляр не создается — @ DanilaGanchar.
поэтому в CController :: createUrl он не может найти идентификатор контроллера, и для использования я должен дать ему аргумент, подобный этому CController :: createUrl («/ page / view», array («name» => $ data-> name )) попробую сейчас и сработало
Порядок элементов в template
должен быть равен порядку элемента в buttons
, У тебя есть {view}{update}
как template
, но вы определили update
кнопка первая! Так что думаю поменять 'template'=>'{view}{update}'
в 'template'=>'{update}{view}'
вероятно, может решить вашу проблему.