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}' вероятно, может решить вашу проблему.

Другие вопросы по тегам