Вставка данных активной записи в виджет 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.