日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Yii中的CComponent应用实例

發布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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应用实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。