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现在已实现数据的调用过程,是不是比传统的方法更灵活,代码写得更规范了
Yii中的CComponent应用实例相关推荐
- YII中的CComponent,CEvent与Behavior及CActiveRecordBehavior
YII中的CComponent,CEvent与Behavior及CActiveRecordBehavior个人理解 这一块教程少,今天个人理解了下,写了个小例子,有助于理解 完成如下功能,一个JToo ...
- yii CComponent组件 实例说明1
yii CComponent组件 实例说明 yii中的module,controller都是CComponent的子类,可以说yii的架构基石就是依托在CCompnent基础上的,这里研究下CComp ...
- yii mysql 事务处理_Yii2中事务的使用实例代码详解
前言 一般我们做业务逻辑,都不会仅仅关联一个数据表,所以,会面临事务问题. 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全 ...
- Yii中Action详解
在此篇中,主要介绍Yii是如何看待Action的.那么在Controller中又是如何如何处理Action的,Action又有哪些需要注意的特性呢? 带着这些问题,我们来看看下面的代码,里面会涉及到Y ...
- YII中session和cookie
一,在Yii中使用session 与原生态php5的session使用差别是,php5使用session_start();$_session['key'] = $value; 在yii中,sess ...
- yii中常见问题(2)
如何显示静态页 重写actions 'help'=>array( 'class'=>'CViewAction', 'basePath'=>'help', //指定目录名 'defau ...
- python创建类的实例方法-Python中动态创建类实例的方法
简介 在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢? 其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模 ...
- python去重复行_python去除文件中重复的行实例
python去除文件中重复的行,我们可以设置一个一个空list,res_list,用来加入没有出现过的字符行! 如果出现在res_list,我们就认为该行句子已经重复了,可以再加入到记录重复句子的li ...
- android native java_在Android Native层中创建Java虚拟机实例
前言 Android应用中JNI代码,是作为本地方法运行的.而大部分情况下,这些JNI方法均需要传递Dalvik虚拟机实例作为第一个参数.例如,你需要用虚拟机实例来创建jstring和其他的Java对 ...
最新文章
- 哈佛图书馆墙上的训言
- python没有上方工具栏_Python体验(08)-图形界面之工具栏和状态栏
- java中exec命令,使用Java中的Runtime.exec()執行Windows命令
- RAC IP 地址修改
- 11. mysqli 学习
- linux定时任务实例,linux定时任务访问url实例
- SqliteHelper整理
- IP SLA的路径控制
- (128)FPGA面试题-用一个二选一的MUX和一个非门实现异或
- 2018.3.10 模拟赛——(2)给出字符串
- 《圈圈教你玩USB》 第七章 USB MIDI键盘 看书笔记
- DelayQueue 分析
- 微信小程序学习并搭建
- Java 全栈知识体系
- WPF制作表示透明区域的马赛克画刷
- LeetCode_初级算法_数组
- c++模板函数的声明和定义该在什么文件里?
- js 实现 将一句英文的首字母转大写,其它转小写
- CCF ChinaSoft 2022预告丨形式化方法工业应用前沿分论坛 暨中科国创高可信联合上海控安新品发布...
- alt在计算机中代表什么,计算机中alt+enter是什么快捷键
热门文章
- python 使用文本注解绘制树节点_整理了 34 个被吹爆了的Python开源框架
- python的flag是什么意思_python flag 什么意思
- 【caffe速成】caffe图像分类从模型自定义到测试
- 【模型解读】network in network中的1*1卷积,你懂了吗
- 全球及中国沼气发电行业现状及项目发展动态调研报告2021年版
- Ehcache缓存配置
- url编码混乱下下载工具如何应对
- 位居全国第一- 丰收节交易会·内蒙古:名特优新农产品数量
- 重整谋定电商经信研究新格局-李玉庭:人工智能精细化运营
- nodejs 全局变量和全局对象