CArrayDataProvider 与 CListView问题 [ 新手入门 ]
刚接触Yii 遇到的问题
我使用的是 CArrayDataProvider。是因为想尽可能的 控制数据的来源,因此用CArrayDataProvider 来自己构造数据 下面是 $userlist
$users = Yii::app()->db->createCommand('select user_id  from tbl_user')->queryAll();
for ($i=0;$i<count($users);$i++)
{
    $useravatar = UserAvatar::model()->find('user_id=?',array($users[$i]['user_id']));
    if (isset($useravatar))
        $userlist[$i] = array_merge($users[$i],$useravatar->attributes);
}
$dataProvider = new CArrayDataProvider($userlist);
$this->render('index',array(
    'dataProvider'=>$dataProvider,
));
下面是view
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_view',
)); 
下面是itemView
<div class="view">
    <?php echo CHtml::encode($data['user_id']); ?>
    <br />
</div>
结果是 在 CArrayDataProvider.php 中报错 Undefined index: id
        protected function fetchKeys()
097     {
098         if($this->keyField===false)
099             return array_keys($this->rawData);
100         foreach($this->getData() as $i=>$data)
101             $keys[$i]=is_object($data) ? $data->{$this->keyField} : $data[$this->keyField];
102         return $keys;
103     }
显示错误是在 101 处。
共 4 条回复
- 
 好像感觉是 CArrayDataProvider 的 keyFeild 设置问题。 直接修改了 CArrayDataProvider 的 fetchKeys()方法 protected function fetchKeys() { if($this->keyField===false) return array_keys($this->rawData); foreach($this->getData() as $i=>$data) { $keys[$i]='user_id'; } //$keys[$i]=is_object($data) ? $data->{$this->keyField} : $data[$this->keyField]; return $keys; }显示正常了。。。不是很明白 这个keyField 在 CArrayDataProvider的构造函数中 怎么设置。。 这个CArrayDataProvider要 自己重载??? 
- 
 yii里面关于CArrayDataProvider的 代码注释 /** * @var string the name of key field. Defaults to 'id'. If it's set to false, * keys of $rawData array are used. */ public $keyField='id';设置keyField 为false 将使用 rawData的数组里的keys。 修改了 在构造 CArrayDataProvider 处的代码 $dataProvider = new CArrayDataProvider($userlist,array( 'keyField'=>false, ));但还是报错。。 
- 
  
- 
  
leeyee
            注册时间:2012-08-20
最后登录:1970-01-01
在线时长:0小时0分
    最后登录:1970-01-01
在线时长:0小时0分
- 粉丝0
- 金钱25
- 威望0
- 积分25