【问题标题】:yii CButtonColumn in gride view gives error网格视图中的 yii 按钮列给出错误
【发布时间】:2015-08-15 08:48:01
【问题描述】:

我有一个带有 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))'
                ),
            ),
        ),
)));

【问题讨论】:

  • 您可以创建任何自定义列。 Here例子
  • @DanilaGanchar 我的应用程序中有另一个 gideviews 我没有问题,但在这种情况下,yii 给我那个错误!
  • 你能显示错误和行吗?
  • 我说我的问题@DanilaGanchar 中的错误:CButtonColumn 及其行为没有名为“getId”的方法或闭包。
  • 这很奇怪。试试这个进行测试。 'update'=>array( 'url'=>'$data->name' ), 'view'=>array( 'url'=>'$data->name' ),。有效果吗?

标签: php gridview yii controller cbuttoncolumn


【解决方案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()->controller 它是当前应用程序的实例控制器。控制器具有私有属性 $_id。 CController::createUrl 它只是静态方法。在方法createUrl()中调用方法$this->getId(),但是当你调用静态方法实例时没有创建-@DanilaGanchar。

所以在 CController::createUrl 中它找不到控制器的 id 并且为了使用我应该给它这样的参数 CController::createUrl("/page/view",array("name"=>$data ->名称))我现在尝试并工作了

【讨论】:

  • 因为Yii::app()->controller是当前应用的实例控制器。控制器有属性private $_idCController::createUrl 这只是静态方法。在方法 createUrl() 中调用方法 $this->getId(),但是当你调用静态方法时没有创建实例。
  • 你是对的,所以在CController::createUrl 中它找不到控制器的 id,我应该给它这样的参数 CController::createUrl("/page/view",array("name"=>$data->name)) 我现在尝试并工作。谢谢@DanilaGanchar。
【解决方案2】:

template 中元素的顺序必须等于buttons 中元素的顺序。你有{view}{update} 作为template,但你首先定义了update 按钮!所以我认为将'template'=>'{view}{update}' 更改为'template'=>'{update}{view}' 可能可以解决您的问题。

【讨论】:

  • 还是CButtonColumn and its behaviors do not have a method or closure named "getId" 错误?
  • 是的,它以未知的原因解决了!我在下面说
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多