Yii Framework v1.1.10 绫诲弬鑰

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浼氳繑鍥炴帓搴忓拰锛堟垨锛夊垎椤靛悗鐨勬暟鎹 鎮ㄥ彲浠ラ厤缃sortpagination鐨勫睘鎬э紝 骞惰嚜瀹氫箟鎺掑簭鍜屽垎椤电殑琛屼负銆

鍘熷鏁版嵁鏁扮粍涓殑鍏冪礌鍙互鏄璞★紙渚嬪锛宮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

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__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() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 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() 涓簆rovider璁剧疆鏁版嵁椤广 CDataProvider
setId() 璁剧疆provider鐨処D銆 CDataProvider
setKeys() 涓簆rovider璁剧疆鏁版嵁椤圭殑閿 CDataProvider
setPagination() 璁剧疆provider鐨刾agination瀵硅薄銆 CDataProvider
setSort() 涓烘暟鎹彁渚涜呰缃帓搴忋 CDataProvider
setTotalItemCount() 璁剧疆鎵鏈夋暟鎹」鐨勬绘暟銆 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灏嗚淇敼銆

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.