Yii中的CComponent应用实例
首先我們先了解一下如何創建一個CComponent,手冊講述如下:
?
CComponent 是所有組件類的基類。?
CComponent 實現了定義、使用屬性和事件的協議。?
屬性是通過getter方法或/和setter方法定義。訪問屬性就像訪問普通的對象變量。讀取或寫入屬性將調用應相的getter或setter方法,例如:
?
?
| 1 2 | $a=$component->text;???? // equivalent to $a=$component->getText(); $component->text='abc';? // equivalent to $component->setText('abc'); |
getter和setter方法的格式如下,?
| 1 2 3 4 | // getter, defines a readable property 'text' public function getText() { ... } // setter, defines a writable property 'text' with $value to be set to the property public function setText($value) { ... } |
更多請參考手冊中的CComponent部份,在這里不是詳述重點
?
下面是應用需求,在一個網站前端,常常會有一個則欄,而這個側欄所需要的數據是一樣的,并且有兩個數據封裝,按照過往手法是寫一個通用方法,在需要的頁面內通過調用方法進行數據組裝,并附值到模板,但相比起組件還是不夠靈活。在CComponent是以對象方式訪問方法。
?
1.下面是代碼實現方式
在extensions新建component目錄,并創建SSidebarComponent類繼承Yii 的CComponent接口
?
class SSidebarComponent extends CComponent { }?
?
為了方便查詢并減小代碼重復,我們先創建一個CDbCriteria的通用查詢原型
private function _criteria() {$uid = Yii::app()->user->id;$criteria = new CDbCriteria();$criteria->condition = 'user_id = :uid';$criteria->params = array(':uid'=>$uid);$criteria->order = 'id asc';return $criteria; }?
按照CComponent約定的方式即setter,我們創建第一個數據對象,即以$component->account即可返回user_account_track表的查詢結果
public function getAccount() { return UserAccountTrack::model()->findAll($this->_criteria()); }?
創建第二個數據對象方法
public function getWebsite() { return UserTrack::model()->findAll($this->_criteria()); }?
同理即以$component->account即可返回usertrack表的查詢結果
?
如果您想在調用時對CComponent某個屬性進行附值,即setter
?
?
public $id; public function setId($value){$this->id = $value; }?
這樣設置后當你引用組件時就可以通過以下方法附值
?
$component->id = '1';?
2.下面講解調用過程
被動加載在你的控制器下引用組件,如我要在task這個index下使用側欄,優點,按需加載,資源消耗小,缺點:手工加載
public function actionIndex($id = null) {$component = Yii::createComponent(array('class'=>'ext.component.SSidebarComponent'));//引用組件$component->id = $id;//如果需要附值,就是這樣$account = $component->account;//實際是調用getAccount()的方法及返回值$website = $component->website;//實際是調用getWebsite()的方法及返回值 $this->render('publiclist',array('website'=>$website,//附值變量到模板'account'=>$account,//附值變量到模板 )); }?
主動加載,優點,全站調用,以對象方法調用資源,缺點:資源消耗增多
/***config/main.php配置*/ component=>array('sidebar'=>array('class'=>'ext.component.SSidebarComponet',), ),/***controller調用*/ public function actionIndex() {Yii::app()->sidebar->account; }?
?
OK現在已實現數據的調用過程,是不是比傳統的方法更靈活,代碼寫得更規范了
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Yii中的CComponent应用实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 适配器的应用
- 下一篇: android闹钟提醒