日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Yii中的CComponent应用实例

發(fā)布時(shí)間:2025/3/20 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Yii中的CComponent应用实例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先我們先了解一下如何創(chuàng)建一個(gè)CComponent,手冊(cè)講述如下:

?

CComponent 是所有組件類的基類。?
CComponent 實(shí)現(xiàn)了定義、使用屬性和事件的協(xié)議。?
屬性是通過getter方法或/和setter方法定義。訪問屬性就像訪問普通的對(duì)象變量。讀取或?qū)懭雽傩詫⒄{(diào)用應(yīng)相的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) { ... }

更多請(qǐng)參考手冊(cè)中的CComponent部份,在這里不是詳述重點(diǎn)

?

下面是應(yīng)用需求,在一個(gè)網(wǎng)站前端,常常會(huì)有一個(gè)則欄,而這個(gè)側(cè)欄所需要的數(shù)據(jù)是一樣的,并且有兩個(gè)數(shù)據(jù)封裝,按照過往手法是寫一個(gè)通用方法,在需要的頁(yè)面內(nèi)通過調(diào)用方法進(jìn)行數(shù)據(jù)組裝,并附值到模板,但相比起組件還是不夠靈活。在CComponent是以對(duì)象方式訪問方法。

?

1.下面是代碼實(shí)現(xiàn)方式

在extensions新建component目錄,并創(chuàng)建SSidebarComponent類繼承Yii 的CComponent接口

?

class SSidebarComponent extends CComponent { }

?


?

為了方便查詢并減小代碼重復(fù),我們先創(chuàng)建一個(gè)CDbCriteria的通用查詢?cè)?/p> 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,我們創(chuàng)建第一個(gè)數(shù)據(jù)對(duì)象,即以$component->account即可返回user_account_track表的查詢結(jié)果

public function getAccount() { return UserAccountTrack::model()->findAll($this->_criteria()); }

?


創(chuàng)建第二個(gè)數(shù)據(jù)對(duì)象方法

public function getWebsite() { return UserTrack::model()->findAll($this->_criteria()); }

?


同理即以$component->account即可返回usertrack表的查詢結(jié)果

?

如果您想在調(diào)用時(shí)對(duì)CComponent某個(gè)屬性進(jìn)行附值,即setter

?

?

public $id; public function setId($value){$this->id = $value; }

?


這樣設(shè)置后當(dāng)你引用組件時(shí)就可以通過以下方法附值

?

$component->id = '1';

?


2.下面講解調(diào)用過程

被動(dòng)加載在你的控制器下引用組件,如我要在task這個(gè)index下使用側(cè)欄,優(yōu)點(diǎn),按需加載,資源消耗小,缺點(diǎn):手工加載

public function actionIndex($id = null) {$component = Yii::createComponent(array('class'=>'ext.component.SSidebarComponent'));//引用組件$component->id = $id;//如果需要附值,就是這樣$account = $component->account;//實(shí)際是調(diào)用getAccount()的方法及返回值$website = $component->website;//實(shí)際是調(diào)用getWebsite()的方法及返回值 $this->render('publiclist',array('website'=>$website,//附值變量到模板'account'=>$account,//附值變量到模板 )); }

?


主動(dòng)加載,優(yōu)點(diǎn),全站調(diào)用,以對(duì)象方法調(diào)用資源,缺點(diǎn):資源消耗增多

/***config/main.php配置*/ component=>array('sidebar'=>array('class'=>'ext.component.SSidebarComponet',), ),/***controller調(diào)用*/ public function actionIndex() {Yii::app()->sidebar->account; }

?


?

OK現(xiàn)在已實(shí)現(xiàn)數(shù)據(jù)的調(diào)用過程,是不是比傳統(tǒng)的方法更靈活,代碼寫得更規(guī)范了

與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的Yii中的CComponent应用实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。