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))'
),
),
),
)));

0

Решение

решена! причина в:

        '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 )) попробую сейчас и сработало

1

Другие решения

Порядок элементов в template должен быть равен порядку элемента в buttons, У тебя есть {view}{update} как template, но вы определили update кнопка первая! Так что думаю поменять 'template'=>'{view}{update}' в 'template'=>'{update}{view}' вероятно, может решить вашу проблему.

0

По вопросам рекламы [email protected]