欢迎访问 生活随笔!

生活随笔

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

编程问答

Yii中的CComponent应用实例

发布时间:2025/3/20 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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应用实例的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。