首先我们先了解一下如何创建一个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现在已实现数据的调用过程,是不是比传统的方法更灵活,代码写得更规范了

Yii中的CComponent应用实例的更多相关文章

  1. yii CComponent组件 实例说明1

    yii CComponent组件 实例说明 yii中的module,controller都是CComponent的子类,可以说yii的架构基石就是依托在CCompnent基础上的,这里研究下CComp ...

  2. 在YII中使用Redis等缓存

    Yii AR 单行数据-自动缓存机制 | LOCKPHP Yii AR 单行数据-自动LOG机制 CActiveRecordBehavior进阶 | LOCKPHP 缓存 - 权威指南 - Yii F ...

  3. Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)

    英文原文:http://www.yiiframework.com/wiki/394/javascript-and-ajax-with-yii /*** http://www.yiiframework. ...

  4. yii中缓存(cache)详解

    缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 内部方法 一.缓存配置: 1 ...

  5. Yii框架 多表查询实例

    Yii框架多表查询实例:总共分为两个步骤(以下的代码我全部都写在model中):1.先在主表model中声明关联表中所需要查询的字段. public $surveyls_description; // ...

  6. yii中缓存(cache)详解 - 彼岸あ年華ツ

    缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成 这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 内部方法 一.缓存配置: ...

  7. Yii中的错误及异常处理

    Yii中的错误及异常处理 Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler, set_error_handler实现的. ...

  8. Scala 深入浅出实战经典 第45讲: scala中context bounds代码实例

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  9. yii 中引入js 和css 的方式

    在yii中 我们需要引入css 和 js 的时候,yii 自身有需要的类. 当我在views 视图层中引入css 和 js , <?php Yii::app()->clientScript ...

随机推荐

  1. Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(三)——H2,MyBatis集成

    1.配置h2,连接池,MyBatis Maven依赖: <!-- spring与数据库访问集成(非Hibernate) --> <dependency> <groupId ...

  2. 借助IDE到处Runnable JAR 的步骤

    1. 选择项目,右键,export,选择Java目录下的Runnable JAR file , next 2. Lanch configuration 中选择启动类 3. Export destina ...

  3. 中国程序化购买广告解析:RTB/DSP/Ad Exchange/SSP/DMP,思维导图

    中国程序化购买广告解析:RTB/DSP/Ad Exchange/SSP/DMP 概念 程序化购买( Programmatic Buying):通过数字化.自动化.系统化的方式改造广告主.代理公司.媒体 ...

  4. 【运维技术】Maven + Gogs + Nexus 实现版本管理 + 代码模块开发管理

    Gogs:能够实现fork + 代码提交 + 代码框架 Nexus:进行jar包的版本管理,私服下载jar包共享jar包 Maven:在客户端进行模块管理和批量操作 1. 本地maven仓库配置配置s ...

  5. 基于Spring Cloud的微服务落地

    微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务.但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持. 在Java生态圈,目前使用较多的微服务 ...

  6. Docker搭建RabbitMQ集群

    Docker搭建RabbitMQ集群 Docker安装 见官网 RabbitMQ镜像下载及配置 见此博文 集群搭建 首先,我们需要启动运行RabbitMQ docker run -d --hostna ...

  7. Android java 多线程(三)

  8. python字符串、列表和文件对象总结

    1.字符串是字符序列.字符串文字可以用单引号或者双引号分隔. 2.可以用内置的序列操作来处理字符串和列表:连接(+).重复(*).索引([]),切片([:])和长度(len()).可以用for循环遍历 ...

  9. Ansible 入门指南 - 学习总结

    概述 这周在工作中需要去修改 nginx 的配置,发现了同事在使用 ansible 管理者系统几乎所有的配置,从数据库的安装.nginx 的安装及配置.于是这周研究起了 ansible 的基础用法.回 ...

  10. 调试工具--console用法收藏

    1.使用console进行性能测试和计算代码运行时间:http://www.cnblogs.com/0603ljx/p/4387628.html 2.console命令详解:http://www.cn ...