Вставка данных активной записи в виджет YGR CGRidView

У меня есть таблица в 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 ответа

Решение

Вы можете использовать класс 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',
    ),
  ),
));

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

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

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

пример:

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

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

Другие вопросы по тегам