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 propertypublic 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应用实例的更多相关文章
- yii CComponent组件 实例说明1
yii CComponent组件 实例说明 yii中的module,controller都是CComponent的子类,可以说yii的架构基石就是依托在CCompnent基础上的,这里研究下CComp ...
- 在YII中使用Redis等缓存
Yii AR 单行数据-自动缓存机制 | LOCKPHP Yii AR 单行数据-自动LOG机制 CActiveRecordBehavior进阶 | LOCKPHP 缓存 - 权威指南 - Yii F ...
- Javascript and AJAX with Yii(在yii 中使用 javascript 和ajax)
英文原文:http://www.yiiframework.com/wiki/394/javascript-and-ajax-with-yii /*** http://www.yiiframework. ...
- yii中缓存(cache)详解
缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 内部方法 一.缓存配置: 1 ...
- Yii框架 多表查询实例
Yii框架多表查询实例:总共分为两个步骤(以下的代码我全部都写在model中):1.先在主表model中声明关联表中所需要查询的字段. public $surveyls_description; // ...
- yii中缓存(cache)详解 - 彼岸あ年華ツ
缓存是用于提升网站性能的一种即简单又有效的途径.通过存储相对静态的数据至缓存以备所需,我们可以省去生成 这些数据的时间.在 Yii 中使用缓存主要包括配置和访问缓存组件 . 内部方法 一.缓存配置: ...
- Yii中的错误及异常处理
Yii中的错误及异常处理 Yii已经默认已经在CApplication上实现了异常和错误的接管,这是通过php的set_exception_handler, set_error_handler实现的. ...
- Scala 深入浅出实战经典 第45讲: scala中context bounds代码实例
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- yii 中引入js 和css 的方式
在yii中 我们需要引入css 和 js 的时候,yii 自身有需要的类. 当我在views 视图层中引入css 和 js , <?php Yii::app()->clientScript ...
随机推荐
- 25最短路径之Dijkstra算法
图的最优化问题:最小生成树.最短路径 典型的图应用问题 无向连通加权图的最小生成树 有向/无向加权图的最短路径 四个经典算法 Kruskal算法.Prim算法---------------最小生成树 ...
- Intro to Python for Data Science Learning 3 - functions
Functions from:https://campus.datacamp.com/courses/intro-to-python-for-data-science/chapter-3-functi ...
- 待解决:PDF header signature not found
- android实操--练习2
练习2是实现一个计算器的功能:可以加减乘除:可以倒退,可以清空文本. 下面是效果展示: -----------------------布局------------------------------- ...
- linux基础命令---rm
rm 删除文件和目录,默认情况下不会删除目录. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. 1.语法 rm [选项] ...
- office2007-安装程序找不到office.zh-cn\*.文件
在同时安装vs2008 和 office2007 有可能会遇到个问题(如果现在安装office2007,在安装vs2008 不会出现问题, 反正会出现下面问题) 在安装office2007时总是提示“ ...
- Linux中Postfix邮件安装Maildrop(八)
Postfix使用maildrop投递邮件 Maildrop是本地邮件投递代理(MDA), 支持过滤(/etc/maildroprc).投递和磁盘限额(Quota)功能. Maildrop是一个使用C ...
- [VTK]基于VTK的三维重建
https://www.cnblogs.com/dawnWind/archive/2013/02/17/3D_06.html 0. Background 很久很久以前记录了一下使用WPF进行三维重建的 ...
- 【前端开发】利用Fiddler抓包工具进行本地调试
解决什么问题: 解决前端在本地联调页面 || 样式 || 脚本时经常修改服务器代码,浪费太多时间. 避免多人同时修改代码产生冲突问题.可以在本地调完代码之后,再贴到服务器上. 其实这个问题老早就开始想 ...
- Python Web学习笔记之图解TCP/IP协议和浅析算法
本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1主要包括三部分:建立连接.传 ...