CArrayDataProvider
| Пакет | system.web |
|---|---|
| Наследование | класс CArrayDataProvider » CDataProvider » CComponent |
| Реализует | IDataProvider |
| С версии | 1.1.4 |
| Исходный код | framework/web/CArrayDataProvider.php |
Свойство rawData содержит все данные, которые могут быть отсортированы и/или постраничены. CArrayDataProvider предоставит данные после сортировки и/или постраничной разбивки. Вы можете настроить свойства sort и pagination для настройки поведения сортировки и постраничной разбивки.
Элементы в массиве исходных данных могут быть либо объектами (например, объектами модели), либо ассоциативными массивами (например, результатами запросов DAO). Убедитесь, что вы установили свойство keyField в имя поля, которое однозначно идентифицирует запись данных, или в false, если такого поля нет.
CArrayDataProvider можно использовать следующим образом:
$rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll();
// or using: $rawData=User::model()->findAll();
$dataProvider=new CArrayDataProvider($rawData, array(
'id'=>'user',
'sort'=>array(
'attributes'=>array(
'id', 'username', 'email',
),
),
'pagination'=>array(
'pageSize'=>10,
),
));
// $dataProvider->getData() will return a list of arrays.
Примечание: если вы хотите использовать функцию сортировки, вы должны настроить свойство sort, чтобы поставщик знал, по каким столбцам можно сортировать.
Свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| caseSensitiveSort | boolean | управляет процессом сортировки. | CArrayDataProvider |
| data | массив | Возвращает элементы данных, доступные в настоящее время. | CDataProvider |
| id | строка | Возвращает идентификатор, который однозначно идентифицирует поставщик данных. | CDataProvider |
| itemCount | целое число | Возвращает количество элементов данных на текущей странице. | CDataProvider |
| keyField | строка | имя поля ключа. | CArrayDataProvider |
| keys | массив | Возвращает значения ключей, связанные с элементами данных. | CDataProvider |
| pagination | CPagination|false | Возвращает объект постраничной разбивки. | CDataProvider |
| rawData | массив | данные, которые не постраничены и не отсортированы. | CArrayDataProvider |
| sort | CSort|false | Возвращает объект сортировки. | CDataProvider |
| totalItemCount | целое число | Возвращает общее количество элементов данных. | CDataProvider |
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает метод с указанным именем, который не является методом класса. | CComponent |
| __construct() | Конструктор. | CArrayDataProvider |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение по его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства нулевым. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в значение null. | CComponent |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Присоединяет поведение к данному компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, может ли свойство быть прочитано. | CComponent |
| canSetProperty() | Определяет, может ли свойство быть установлено. | CComponent |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединенное поведение. | CComponent |
| disableBehaviors() | Отключает все присоединённые поведения этого компонента. | CComponent |
| enableBehavior() | Включает присоединённое поведение. | CComponent |
| enableBehaviors() | Включает все присоединённые поведения этого компонента. | CComponent |
| evaluateExpression() | Вычисляет выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| getData() | Возвращает элементы данных, которые в данный момент доступны. | CDataProvider |
| getEventHandlers() | Возвращает список присоединённых обработчиков событий для события. | CComponent |
| getId() | Возвращает идентификатор, уникально определяющий источник данных. | CDataProvider |
| getItemCount() | Возвращает количество элементов данных на текущей странице. | CDataProvider |
| getKeys() | Возвращает значения ключей, связанные с элементами данных. | CDataProvider |
| getPagination() | Возвращает объект постраничной навигации. | CDataProvider |
| getSort() | Возвращает объект сортировки. | CDataProvider |
| getTotalItemCount() | Возвращает общее количество элементов данных. | CDataProvider |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли обработчики событий для данного события. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| raiseEvent() | Вызывает событие. | CComponent |
| setData() | Устанавливает элементы данных для этого источника. | CDataProvider |
| setId() | Устанавливает идентификатор источника данных. | CDataProvider |
| setKeys() | Устанавливает ключи элементов данных для этого источника. | CDataProvider |
| setPagination() | Устанавливает постраничную навигацию для этого источника данных. | CDataProvider |
| setSort() | Устанавливает сортировку для этого источника данных. | CDataProvider |
| setTotalItemCount() | Устанавливает общее количество элементов данных. | CDataProvider |
Защищённые методы
| Метод | Описание | Определено в |
|---|---|---|
| calculateTotalItemCount() | Вычисляет общее количество элементов данных. | CArrayDataProvider |
| fetchData() | Извлекает данные из постоянного хранилища данных. | CArrayDataProvider |
| fetchKeys() | Извлекает ключи элементов данных из постоянного хранилища данных. | CArrayDataProvider |
| getSortDirections() | Преобразует запрос "ORDER BY" в массив, представляющий направления сортировки. | CArrayDataProvider |
| getSortingFieldValue() | Получение поля для сортировки, используя разделитель точки в запросе. | CArrayDataProvider |
| sortData() | Сортирует исходные данные в соответствии с указанными инструкциями по сортировке. | CArrayDataProvider |
Подробное описание свойств
caseSensitiveSort свойство (доступно с версии v1.1.13)
public boolean $caseSensitiveSort;
управляет тем, как работает сортировка. Значение true означает, что регистр учитывается. Значение false приведет к сортировке без учета регистра. По умолчанию значение true.
keyField свойство
public string $keyField;
имя поля ключа. Это поле, которое однозначно идентифицирует запись данных. В базе данных это будет первичный ключ. По умолчанию равно 'id'. Если установлено в false, используются ключи массива rawData.
rawData свойство
public array $rawData;
данные, которые не постраничены и не отсортированы. Когда включена постраничная навигация, это свойство обычно содержит больше элементов, чем data. Элементы массива должны использовать целочисленные ключи, начиная с нуля.
Подробное описание методов
__construct() метод
public void __construct(array $rawData, array $config=array ( )) | ||
| $rawData | array | данные, которые не постраничены и не отсортированы. Элементы массива должны использовать целочисленные ключи, начиная с нуля. |
| $config | array | конфигурация (имя=>значение), которая будет применена в качестве начальных значений свойств этого класса. |
public function __construct($rawData,$config=array())
{
$this->rawData=$rawData;
foreach($config as $key=>$value)
$this->$key=$value;
}
Конструктор.
calculateTotalItemCount() метод
protected integer calculateTotalItemCount() | ||
| {return} | целое число | общее количество элементов данных. |
protected function calculateTotalItemCount()
{
return count($this->rawData);
}
Вычисляет общее количество элементов данных. Этот метод просто возвращает количество элементов в rawData.
fetchData() метод
protected array fetchData() | ||
| {return} | массив | список элементов данных |
protected function fetchData()
{
if(($sort=$this->getSort())!==false && ($order=$sort->getOrderBy())!='')
$this->sortData($this->getSortDirections($order));
if(($pagination=$this->getPagination())!==false)
{
$pagination->setItemCount($this->getTotalItemCount());
return array_slice($this->rawData, $pagination->getOffset(), $pagination->getLimit());
}
else
return $this->rawData;
}
Извлекает данные из постоянного хранилища данных.
fetchKeys() метод
protected array fetchKeys() | ||
| {return} | массив | список ключей элементов данных. |
protected function fetchKeys()
{
if($this->keyField===false)
return array_keys($this->rawData);
$keys=array();
foreach($this->getData() as $i=>$data)
$keys[$i]=is_object($data) ? $data->{$this->keyField} : $data[$this->keyField];
return $keys;
}
Извлекает ключи элементов данных из постоянного хранилища данных.
getSortDirections() метод
protected array getSortDirections(string $order) | ||
| $order | строка | запрос "ORDER BY". |
| {return} | массив | направления сортировки (имя поля => сортировка по убыванию) |
protected function getSortDirections($order)
{
$segs=explode(',',$order);
$directions=array();
foreach($segs as $seg)
{
if(preg_match('/(.*?)(\s+(desc|asc))?$/i',trim($seg),$matches))
$directions[$matches[1]]=isset($matches[3]) && !strcasecmp($matches[3],'desc');
else
$directions[trim($seg)]=false;
}
return $directions;
}
Преобразует запрос "ORDER BY" в массив, представляющий направления сортировки.
getSortingFieldValue() метод
protected mixed getSortingFieldValue(mixed $data, array $fields) | ||
| $data | смешанный тип | массив или объект |
| $fields | массив | поля сортировки в $data |
| {return} | смешанный тип | значение поля сортировки $data |
protected function getSortingFieldValue($data, $fields)
{
if(is_object($data))
{
foreach($fields as $field)
$data=isset($data->$field) ? $data->$field : null;
}
else
{
foreach($fields as $field)
$data=isset($data[$field]) ? $data[$field] : null;
}
return $this->caseSensitiveSort ? $data : mb_strtolower($data,Yii::app()->charset);
}
Получение поля для сортировки, используя разделитель типа точка в запросе.
sortData() метод
protected void sortData(array $directions) | ||
| $directions | массив | направления сортировки (имя поля => сортировка по убыванию) |
protected function sortData($directions)
{
if(empty($directions) || empty($this->rawData))
return;
$args=array();
$dummy=array();
foreach($directions as $name=>$descending)
{
$column=array();
$fields_array=preg_split('/\.+/',$name,-1,PREG_SPLIT_NO_EMPTY);
foreach($this->rawData as $index=>$data)
$column[$index]=$this->getSortingFieldValue($data, $fields_array);
$args[]=&$column;
$dummy[]=&$column;
unset($column);
$direction=$descending ? SORT_DESC : SORT_ASC;
$args[]=&$direction;
$dummy[]=&$direction;
unset($direction);
}
// This fix is used for cases when main sorting specified by columns has equal values
// Without it it will lead to Fatal Error: Nesting level too deep - recursive dependency?
$args[]=range(1,count($this->rawData));
$args[]=SORT_ASC;
$args[]=SORT_NUMERIC;
$args[]=&$this->rawData;
call_user_func_array('array_multisort', $args);
}
Сортирует исходные данные в соответствии с указанными инструкциями сортировки. После вызова этого метода rawData будет изменён.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CArrayDataProvider