CArrayDataProvider

优质
小牛编辑
123浏览
2023-12-01
所有包 | 属性 | 方法
system.web
继承class CArrayDataProvider » CDataProvider » CComponent
实现IDataProvider
源自1.1.4
版本$Id: CArrayDataProvider.php 3353 2011-07-12 21:10:36Z alexander.makarow $
源码framework/web/CArrayDataProvider.php
CArrayDataProvider是基于一个原始数据的数组实现的数据提供者。

rawData属性包含所有可以被排序和(或)分页的数据。 CArrayDataProvider会返回排序和(或)分页后的数据。 您可以配置sort和pagination的属性, 并自定义排序和分页的行为。

原始数据数组中的元素可以是对象(例如,model objects) 或关联数组(例如,query results of DAO)。

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属性, 以便让provider知道哪些列需要进行排序。

公共属性

隐藏继承属性

属性类型描述定义在
dataarray返回当前可用的数据项。CDataProvider
idstring返回所有数据提供者的唯一标识ID。CDataProvider
itemCountinteger返回当前页面的数据项数目。CDataProvider
keyFieldstring字段的名称。默认值为‘id’。如果设置为false, $rawData数组中的值将被使用。CArrayDataProvider
keysarray返回相关数据项的键。CDataProvider
paginationCPagination返回pagination对象。CDataProvider
rawDataarray未分页或排序的数据。当启用分页时, 此属性通常比data包含更多的元素。 数组中的元素必须使用从零开始的整数值。CArrayDataProvider
sortCSort返回sort对象。CDataProvider
totalItemCountinteger返回所有数据项的总数。CDataProvider

公共方法

隐藏继承方法

方法描述定义在
__call()如果类中没有调的方法名,则调用这个方法。CComponent
__construct()构造器。CArrayDataProvider
__get()返回一个属性值、一个事件处理程序列表或一个行为名称。CComponent
__isset()检查一个属性是否为null。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()返回所有数据提供者的唯一标识ID。CDataProvider
getItemCount()返回当前页面的数据项数目。CDataProvider
getKeys()返回相关数据项的键。CDataProvider
getPagination()返回pagination对象。CDataProvider
getSort()返回sort对象。CDataProvider
getTotalItemCount()返回所有数据项的总数。CDataProvider
hasEvent()确定一个事件是否定义。CComponent
hasEventHandler()检查事件是否有附加的处理程序。CComponent
hasProperty()确定属性是否被定义。CComponent
raiseEvent()发起一个事件。CComponent
setData()为provider设置数据项。CDataProvider
setId()设置provider的ID。CDataProvider
setKeys()为provider设置数据项的键。CDataProvider
setPagination()设置provider的pagination对象。CDataProvider
setSort()为数据提供者设置排序。CDataProvider
setTotalItemCount()设置所有数据项的总数。CDataProvider

受保护方法

隐藏继承方法

方法描述定义在
calculateTotalItemCount()计算数据项的总数。CArrayDataProvider
fetchData()从持久性数据存储中获取数据。CArrayDataProvider
fetchKeys()获取持久性数据存储的数据项键。CArrayDataProvider
getSortDirections()将“ORDER BY”语句转换为表示排序方向的数组。CArrayDataProvider
sortData()根据指定的排序指令对原始数据进行排序。CArrayDataProvider

属性详细

keyField 属性 public string $keyField;

字段的名称。默认值为‘id’。如果设置为false, $rawData数组中的值将被使用。

rawData 属性 public array $rawData;

未分页或排序的数据。当启用分页时, 此属性通常比data包含更多的元素。 数组中的元素必须使用从零开始的整数值。

方法详细

__construct() 方法
public void __construct(array $rawData, array $config=array ( ))
$rawDataarray未分页或排序的数据。数组中的元素必须使用从零开始的整数值。
$configarray配置(name=>value)作为这个类的初始属性值。
源码: framework/web/CArrayDataProvider.php#67 (显示) publicfunction__construct($rawData,$config=array())
{
$this->rawData=$rawData;
foreach($configas$key=>$value)
$this->$key=$value;
}

构造器。

calculateTotalItemCount() 方法
protected integer calculateTotalItemCount()
{return}integer数据项的总数。
源码: framework/web/CArrayDataProvider.php#111 (显示) protectedfunctioncalculateTotalItemCount()
{
returncount($this->rawData);
}

计算数据项的总数。 这种方法只返回rawData中元素的数量。

fetchData() 方法
protected array fetchData()
{return}array数据项列表
源码: framework/web/CArrayDataProvider.php#78 (显示) protectedfunctionfetchData()
{
if(($sort=$this->getSort())!==false&&($order=$sort->getOrderBy())!='')
$this->sortData($this->getSortDirections($order));

if(($pagination=$this->getPagination())!==false)
{
$pagination->setItemCount($this->getTotalItemCount());
returnarray_slice($this->rawData,$pagination->getOffset(),$pagination->getLimit());
}
else
return$this->rawData;
}

从持久性数据存储中获取数据。

fetchKeys() 方法
protected array fetchKeys()
{return}array列表数据项的键。
源码: framework/web/CArrayDataProvider.php#96 (显示) protectedfunctionfetchKeys()
{
if($this->keyField===false)
returnarray_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)
$orderstring“ORDER BY”语句。
{return}array排序方向(字段名=>是否为降序)
源码: framework/web/CArrayDataProvider.php#149 (显示) protectedfunctiongetSortDirections($order)
{
$segs=explode(',',$order);
$directions=array();
foreach($segsas$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”语句转换为表示排序方向的数组。

sortData() 方法
protected void sortData(array $directions)
$directionsarray排序方向(字段名=>是否为降序)
源码: framework/web/CArrayDataProvider.php#121 (显示) protectedfunctionsortData($directions)
{
if(empty($directions))
return;
$args=array();
$dummy=array();
foreach($directionsas$name=>$descending)
{
$column=array();
foreach($this->rawDataas$index=>$data)
$column[$index]=is_object($data)?$data->$name:$data[$name];
$args[]=&$column;
$dummy[]=&$column;
unset($column);
$direction=$descending?SORT_DESC:SORT_ASC;
$args[]=&$direction;
$dummy[]=&$direction;
unset($direction);
}
$args[]=&$this->rawData;
call_user_func_array('array_multisort',$args);
}

根据指定的排序指令对原始数据进行排序。 调用此方法后,rawData将被修改。