最新消息: 新版网站上线了!!!

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接口

 

1
2
3
class SSidebarComponent extends CComponent
{
}

 

为了方便查询并减小代码重复,我们先创建一个CDbCriteria的通用查询原型

1
2
3
4
5
6
7
8
9
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表的查询结果

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

创建第二个数据对象方法

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

同理即以$component->account即可返回usertrack表的查询结果

 

如果您想在调用时对CComponent某个属性进行附值,即setter

 

 

1
2
3
4
public $id ;
public function setId( $value ){
     $this ->id = $value ;
}

这样设置后当你引用组件时就可以通过以下方法附值

 

1
$component ->id = '1' ;

2.下面讲解调用过程

被动加载在你的控制器下引用组件,如我要在task这个index下使用侧栏,优点,按需加载,资源消耗小,缺点:手工加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public function actionIndex( $id = null)
{
     $component = Yii::createComponent( array ( 'class'  -->

转载请注明:谷谷点程序 » Yii中的CComponent应用实例