Yii中的CComponent应用实例
2014-09-01 22:34
411 查看
首先我们先了解一下如何创建一个CComponent,手册讲述如下:
CComponent 是所有组件类的基类。
CComponent 实现了定义、使用属性和事件的协议。
属性是通过getter方法或/和setter方法定义。访问属性就像访问普通的对象变量。读取或写入属性将调用应相的getter或setter方法,例如:
getter和setter方法的格式如下,
更多请参考手册中的CComponent部份,在这里不是详述重点
下面是应用需求,在一个网站前端,常常会有一个则栏,而这个侧栏所需要的数据是一样的,并且有两个数据封装,按照过往手法是写一个通用方法,在需要的页面内通过调用方法进行数据组装,并附值到模板,但相比起组件还是不够灵活。在CComponent是以对象方式访问方法。
1.下面是代码实现方式
在extensions新建component目录,并创建SSidebarComponent类继承Yii 的CComponent接口
为了方便查询并减小代码重复,我们先创建一个CDbCriteria的通用查询原型
按照CComponent约定的方式即setter,我们创建第一个数据对象,即以$component->account即可返回user_account_track表的查询结果
创建第二个数据对象方法
同理即以$component->account即可返回usertrack表的查询结果
如果您想在调用时对CComponent某个属性进行附值,即setter
这样设置后当你引用组件时就可以通过以下方法附值
2.下面讲解调用过程
被动加载在你的控制器下引用组件,如我要在task这个index下使用侧栏,优点,按需加载,资源消耗小,缺点:手工加载
主动加载,优点,全站调用,以对象方法调用资源,缺点:资源消耗增多
OK现在已实现数据的调用过程,是不是比传统的方法更灵活,代码写得更规范了
CComponent 是所有组件类的基类。
CComponent 实现了定义、使用属性和事件的协议。
属性是通过getter方法或/和setter方法定义。访问属性就像访问普通的对象变量。读取或写入属性将调用应相的getter或setter方法,例如:
下面是应用需求,在一个网站前端,常常会有一个则栏,而这个侧栏所需要的数据是一样的,并且有两个数据封装,按照过往手法是写一个通用方法,在需要的页面内通过调用方法进行数据组装,并附值到模板,但相比起组件还是不够灵活。在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现在已实现数据的调用过程,是不是比传统的方法更灵活,代码写得更规范了
相关文章推荐
- Yii中的CComponent应用实例
- yii2.0-rules验证规则应用实例
- YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解
- Yii2.0数据库查询应用实例(一)
- Yii框架的应用实例--博客搭建
- 二、yii的入口与app应用实例(Yii::app())
- ComponentOne WebChart的一个应用实例
- 第一个 Yii 应用实例
- yii CComponent组件 实例说明1
- Yii框架文摘之二yii的入口与app应用实例(Yii::app())
- YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解
- XSL应用实例
- 算法设计应用实例
- 数据库规范化三个范式应用实例
- ASP.net随机数应用实例
- 元函数在SQL查询中应用实例分析【续上篇】
- UML应用-应用Rational Rose 进行状态机分析与设计实例
- 利用JSF、SpringFramework和Hibernate构建Web应用的实例讲述
- IE里的数据岛应用的最佳实例
- SAS9-IT技术应用-通过JAVA访问SAS实例