Yii 关于CSqlDataProvider和CGridView的合并使用

你说的曾经没有我的故事 提交于 2019-12-05 12:04:23

今天遇到个问题,我将CSqlDataProvider数据代入CGridView的时候,数据能正常使用,但按钮就不能使用了,会提示出错。

问过些朋友,原来sqlDataProvider 中的数据集 是一个二维数组,原始的CGRidView 里面的CColumnButton 默认用的是一个Ar  但你用sqlDataProvider后就变成了关联数组了。所以 url生成那里就出错了。

$data  可能表示一个AR 或者是一个数组

当用SqlDataProvider ,ArrayDataProvider 时就是一个数组,这时候 CButtonColumn 的三个默认url 就需要自己手动修改了 不然就出错了

下面附上一段自动生成CGridView的代码,只需要将你得到的CSqlDataProvider数据输入即可。

/**
     * @param CSqlDataProvider $dp
     * 针对CSqlDataProvider自动生成CGridView的代码
     */
    static public function gridView4sqlDataProvider(CSqlDataProvider $dp)
    {
        $rowSet = $dp->getData();
        $firstRow = array();
        if (!empty($rowSet)) {
            $firstRow = current($rowSet);
        }
        $columns = '';
        foreach (array_keys($firstRow) as $column) {
            $columnItem = <<<COL_ITEM
        array(
             'name'=>'{$column}',
             'header'=>'{$column}',
             'value'=>'\$data["{$column}"]'
         ),
COL_ITEM;
            $columns .= "\n".$columnItem;
        }

        $code = <<<TPL
    \$this->widget('zii.widgets.grid.CGridView', array(
    	'id'=>'yourId',
    	'dataProvider'=>\$dataProvider,
    	'columns'=>array({$columns}
	    	 array(
                 'class' => 'CButtonColumn',
                 'viewButtonUrl' => 'Yii::app()->controller->createUrl("view",array("id"=>\$data["id"]))',
                 'updateButtonUrl' => 'Yii::app()->controller->createUrl("update",array("id"=>\$data["id"]))',
                 'deleteButtonUrl' => 'Yii::app()->controller->createUrl("delete",array("id"=>\$data["id"]))',
           ),
	    ),
	  )	);
TPL;
        echo $code ;  // self::renderCode($code);
    }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!