Вставка данных активной записи в виджет CGRidView Yii - PullRequest
2 голосов
/ 26 апреля 2011

У меня есть таблица в mysql, которую я хочу отобразить с помощью виджета CGridView. Вот мой код:

Файл моего контроллера (конечно же, в разрезе):

public function actionIndex()
{
  //call the AR table model
  $model = new ViewResults();
  //This generates a simple "SELECT * FROM table statment".
  $list = $model->findAll();
  $this->render('index', array('list'=>$list));
}

Файл My View выглядит следующим образом:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$list,
 )); ?>

Я получаю следующую ошибку:

Вызов функции-члена getData () для необъекта в C: \ xampp \ framework \ zii \ widgets \ CBaseListView.php в строке 105

Вот исходный код файла CBaseListView.php .

Я почти уверен, что облажался, поместив объект списка в виджет. Есть ли что-то, что я должен сделать для $list, прежде чем передать это виджету?

Ответы [ 3 ]

3 голосов
/ 27 апреля 2011

findAll () возвращает массив , тогда как CActiveDataProvider возвращает dataProvider.

Если вы хотите использовать find all, все, что вам нужно сделать, это преобразовать массив с помощью CArrayDataProvider

пример:

<?
php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>new CArrayDataProvider($list, array()),
 )); 
?>
2 голосов
/ 26 апреля 2011

Вы можете использовать класс CActiveDataProvider Yii. Примерно так:

$dataProvider = new CActiveDataProvider('model', array(
  'criteria'=>array(
    'order'=>'column1',
  ),
));

$this->widget('zii.widgets.grid.CGridView', array(
  'id'=>'my-grid',
  'dataProvider'=>$dataProvider,
  'columns'=>array(
    'column1',
    'column2',
    'column3',
    array(
      'class'=>'CButtonColumn',
    ),
  ),
));

Где модель - это ваша модель, а столбцы - ваши столбцы.

0 голосов
/ 27 апреля 2011

Использование CArrayDataProvider также вариант. Но сортировку легко выполнить, если она исходит от CActiveDataProvider.

...