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 ...
随机推荐
- keras中TimeDistributed
TimeDistributed这个层还是比较难理解的.事实上通过这个层我们可以实现从二维像三维的过渡,甚至通过这个层的包装,我们可以实现图像分类视频分类的转化. 考虑一批32个样本,其中每个样本是一个 ...
- lnmp1.4 安装php fileinfo扩展 方法
第一步:在lnmp1.4找到php安装的版本 使用命令 tar -jxvf php-7.1.7.tar.bz2 解压 第二步: 在解压的php-7.1.7文件夹里找到fileinfo文件夹,然 ...
- 关于在ASP.NET中使用JavaScript的建议
一个很恼人的情况,就是当你使用JS在一个ASP,NET应用程序中引用一个在模板页初始化的服务器控件的时候: 比如,我们在模板页有一个TextBox的服务器控件,而且我们想要去获取他的Text:如果你使 ...
- MyBatis学习笔记(七)——Mybatis缓存
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4270403.html 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓 ...
- linux基础命令---umask
umask 指定创建文件时所需要的权限掩码,掩码的执行权限对于文件没有效果.如果模式以数字开头,则解释为八进制数字:否则解释为符号模式掩码,类似于chmod(1)所接受的模式掩码.如果省略模式,则打印 ...
- jquery一句话实现快速搜索功能
jquery一句话实现快速搜索功能 //快捷搜索公共方法,其中obj为显示行的子节点function filter(obj, filterNameValue){ $(obj).hide().filte ...
- jquery easyUI相关
jquery easyUI相关===================================easyUI表单验证处理//jquery easyUI 表单验证不通过让光标定位在第一个未通过验证的 ...
- Python3 Selenium自动化-select下拉框
Python3 Selenium自动化-select下拉框 selenium介绍select下拉框相关的操作方法:
- 函数对象与仿函数(function object and functor)
part 1. 仿函数在STL组件中的关系 如下图: # 仿函数配合算法完成不同的策略变化. # 适配器套接仿函数. part 2. 仿函数介绍 传递给算法的“函数型实参”不一定得是函数,可以是行为类 ...
- Fast特征点的寻找和提取
一.基础 最初由Rosten和Drummond [Rosten06]提出的FAST(加速段测试的特征)特征检测算法是基于将点P与其包围圆内的点集的直接比较的思想. 基本思想是,如果附近的几个点与P类似 ...