CArrayDataProvider
| 鍖 | 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鐨勫睘鎬э紝 骞惰嚜瀹氫箟鎺掑簭鍜屽垎椤电殑琛屼负銆
鍘熷鏁版嵁鏁扮粍涓殑鍏冪礌鍙互鏄璞★紙渚嬪锛宮odel objects锛 鎴栧叧鑱旀暟缁勶紙渚嬪锛宷uery results of DAO锛夈
CArrayDataProvider鐨勪娇鐢ㄦ柟娉曞涓嬶細
娉細濡傛灉浣犳兂浣跨敤鎺掑簭鍔熻兘锛屾偍蹇呴』閰嶇疆sort灞炴э紝 浠ヤ究璁﹑rovider鐭ラ亾鍝簺鍒楅渶瑕佽繘琛屾帓搴忋
rawData灞炴у寘鍚墍鏈夊彲浠ヨ鎺掑簭鍜岋紙鎴栵級鍒嗛〉鐨勬暟鎹 CArrayDataProvider浼氳繑鍥炴帓搴忓拰锛堟垨锛夊垎椤靛悗鐨勬暟鎹 鎮ㄥ彲浠ラ厤缃sort鍜pagination鐨勫睘鎬э紝 骞惰嚜瀹氫箟鎺掑簭鍜屽垎椤电殑琛屼负銆
鍘熷鏁版嵁鏁扮粍涓殑鍏冪礌鍙互鏄璞★紙渚嬪锛宮odel objects锛 鎴栧叧鑱旀暟缁勶紙渚嬪锛宷uery 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灞炴э紝 浠ヤ究璁﹑rovider鐭ラ亾鍝簺鍒楅渶瑕佽繘琛屾帓搴忋
鍏叡灞炴
| 灞炴 | 绫诲瀷 | 鎻忚堪 | 瀹氫箟鍦 |
|---|---|---|---|
| data | array | 杩斿洖褰撳墠鍙敤鐨勬暟鎹」銆 | CDataProvider |
| id | string | 杩斿洖鎵鏈夋暟鎹彁渚涜呯殑鍞竴鏍囪瘑ID銆 | CDataProvider |
| itemCount | integer | 杩斿洖褰撳墠椤甸潰鐨勬暟鎹」鏁扮洰銆 | CDataProvider |
| keyField | string | 瀛楁鐨勫悕绉般傞粯璁ゅ间负鈥榠d鈥欍傚鏋滆缃负false锛 $rawData鏁扮粍涓殑鍊煎皢琚娇鐢ㄣ | CArrayDataProvider |
| keys | array | 杩斿洖鐩稿叧鏁版嵁椤圭殑閿 | CDataProvider |
| pagination | CPagination | 杩斿洖pagination瀵硅薄銆 | CDataProvider |
| rawData | array | 鏈垎椤垫垨鎺掑簭鐨勬暟鎹傚綋鍚敤鍒嗛〉鏃讹紝 姝ゅ睘鎬ч氬父姣data鍖呭惈鏇村鐨勫厓绱犮 鏁扮粍涓殑鍏冪礌蹇呴』浣跨敤浠庨浂寮濮嬬殑鏁存暟鍊笺 | CArrayDataProvider |
| sort | CSort | 杩斿洖sort瀵硅薄銆 | CDataProvider |
| totalItemCount | integer | 杩斿洖鎵鏈夋暟鎹」鐨勬绘暟銆 | CDataProvider |
鍏叡鏂规硶
鍙椾繚鎶ゆ柟娉
| 鏂规硶 | 鎻忚堪 | 瀹氫箟鍦 |
|---|---|---|
| calculateTotalItemCount() | 璁$畻鏁版嵁椤圭殑鎬绘暟銆 | CArrayDataProvider |
| fetchData() | 浠庢寔涔呮ф暟鎹瓨鍌ㄤ腑鑾峰彇鏁版嵁銆 | CArrayDataProvider |
| fetchKeys() | 鑾峰彇鎸佷箙鎬ф暟鎹瓨鍌ㄧ殑鏁版嵁椤归敭銆 | CArrayDataProvider |
| getSortDirections() | 灏嗏淥RDER BY鈥濊鍙ヨ浆鎹负琛ㄧず鎺掑簭鏂瑰悜鐨勬暟缁勩 | CArrayDataProvider |
| sortData() | 鏍规嵁鎸囧畾鐨勬帓搴忔寚浠ゅ鍘熷鏁版嵁杩涜鎺掑簭銆 | CArrayDataProvider |
灞炴ц缁
keyField
灞炴
public string $keyField;
瀛楁鐨勫悕绉般傞粯璁ゅ间负鈥榠d鈥欍傚鏋滆缃负false锛 $rawData鏁扮粍涓殑鍊煎皢琚娇鐢ㄣ
rawData
灞炴
public array $rawData;
鏈垎椤垫垨鎺掑簭鐨勬暟鎹傚綋鍚敤鍒嗛〉鏃讹紝 姝ゅ睘鎬ч氬父姣data鍖呭惈鏇村鐨勫厓绱犮 鏁扮粍涓殑鍏冪礌蹇呴』浣跨敤浠庨浂寮濮嬬殑鏁存暟鍊笺
鏂规硶璇︾粏
__construct()
鏂规硶
|
public void __construct(array $rawData, array $config=array (
))
| ||
| $rawData | array | 鏈垎椤垫垨鎺掑簭鐨勬暟鎹傛暟缁勪腑鐨勫厓绱犲繀椤讳娇鐢ㄤ粠闆跺紑濮嬬殑鏁存暟鍊笺 |
| $config | array | 閰嶇疆锛坣ame=>value锛変綔涓鸿繖涓被鐨勫垵濮嬪睘鎬у笺 |
婧愮爜锛 framework/web/CArrayDataProvider.php#67 (鏄剧ず)
public function __construct($rawData,$config=array())
{
$this->rawData=$rawData;
foreach($config as $key=>$value)
$this->$key=$value;
}
鏋勯犲櫒銆
calculateTotalItemCount()
鏂规硶
|
protected integer calculateTotalItemCount()
| ||
| {return} | integer | 鏁版嵁椤圭殑鎬绘暟銆 |
婧愮爜锛 framework/web/CArrayDataProvider.php#111 (鏄剧ず)
protected function calculateTotalItemCount()
{
return count($this->rawData);
}
璁$畻鏁版嵁椤圭殑鎬绘暟銆 杩欑鏂规硶鍙繑鍥rawData涓厓绱犵殑鏁伴噺銆
fetchData()
鏂规硶
|
protected array fetchData()
| ||
| {return} | array | 鏁版嵁椤瑰垪琛 |
婧愮爜锛 framework/web/CArrayDataProvider.php#78 (鏄剧ず)
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} | array | 鍒楄〃鏁版嵁椤圭殑閿 |
婧愮爜锛 framework/web/CArrayDataProvider.php#96 (鏄剧ず)
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 | string | 鈥淥RDER BY鈥濊鍙ャ |
| {return} | array | 鎺掑簭鏂瑰悜锛堝瓧娈靛悕=>鏄惁涓洪檷搴忥級 |
婧愮爜锛 framework/web/CArrayDataProvider.php#149 (鏄剧ず)
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;
}
灏嗏淥RDER BY鈥濊鍙ヨ浆鎹负琛ㄧず鎺掑簭鏂瑰悜鐨勬暟缁勩
sortData()
鏂规硶
|
protected void sortData(array $directions)
| ||
| $directions | array | 鎺掑簭鏂瑰悜锛堝瓧娈靛悕=>鏄惁涓洪檷搴忥級 |
婧愮爜锛 framework/web/CArrayDataProvider.php#121 (鏄剧ず)
protected function sortData($directions)
{
if(empty($directions))
return;
$args=array();
$dummy=array();
foreach($directions as $name=>$descending)
{
$column=array();
foreach($this->rawData as $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灏嗚淇敼銆