yii CButtonColumn в представлении gride выдает ошибку
У меня есть страница администратора с 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))'
),
),
),
)));
2 ответа
Решена! причина в:
'view'=>array(
'url'=>'CController::createUrl("view",array("name"=>$data->name))'
),
так должно быть:
'view'=>array(
'url'=>'Yii::app()->controller->createUrl("view", array("name"=>$data->name))'
),
и почему? Потому что (): потому что Yii::app()-> контроллер это экземпляр контроллера текущего приложения. Контроллер имеет свойство 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}'
вероятно, может решить вашу проблему.