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灏嗚淇敼銆