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