1

我是 Yii 的新手,试图在主页上显示用户列表,但这样做时出现错误:未定义属性“CListView.userlist”。代码:SiteController.php

class SiteController extends Controller {
    // This is the function which I changed reset is file remains same
    public function actionIndex() {
        $userlist = User::model()->findAllBySql($sql);
        $this->render('index',array('userlist'=>$userlist,));
    }
}

站点视图代码 index.php:

$this->widget('zii.widgets.CListView', array(
    'userlist'=>$userlist,
    'itemView'=>'_view',
    ));

在最后的 _view.php 中:

echo CHtml::encode($data->getAttributeLabel('id'));

目前在使用代码时出现错误:未定义属性“CListView.userlist”。但是如果我用 $dataProvider 替换 $userlist,错误会变为“致命错误:在 C:\devCenter\yii\framework\zii\widgets\CBaseListView.php 中的非对象上调用成员函数 getData() 在线107"

我有两个问题:

  1. $dataProvider 似乎有特殊含义,请告诉我这是为什么。
  2. 我将 $userlist 从 SiteController 传递给 index.php,然后传递给 $this->widget(),但是在 _view.php 中,变量更改为 $data,我错过了什么?我已经阅读了 Yii 网站上的文档,但我无法理解这一点。
4

2 回答 2

1

在 SiteController: actionIndex ()函数中,未定义“ $sql ” ...

编辑:

对于 CListView Widget,您需要将 '$userlist' 转换为 'CActiveDataProvider',如下所示:

$userlist = User::model()->findAllBySql($sql);
$userListDP = new CActiveDataProvider($userlist);
$this->render('index',array('userListDP'=>$userListDP));

在视图文件中:CListView Widget 需要一个 dataProvider。

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$userListDP, // CListView collect the data from 'dataProvider' param name.
    'itemView'=>'_view',
    ));
于 2013-08-08T12:24:06.417 回答
1

您在代替 dataprovider 的 ClistView 语法中犯了错误,您已插入用户列表,因此您收到错误undefined userlist

这是你的语法

$this->widget('zii.widgets.CListView', array(
    'userlist'=>$userlist,
    'itemView'=>'_view',
    ));

正确的语法如图所示

$this->widget('zii.widgets.CListView', array(
    'dataprovider'=>$userlist,
    'itemView'=>'_view',
    ));

并且$userlist必须是有效的数据提供者才能按照 Daniel Vaquero 提供的步骤正确定义它

于 2013-08-08T12:54:29.323 回答