博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yii CComponent组件 实例说明1
阅读量:6591 次
发布时间:2019-06-24

本文共 3023 字,大约阅读时间需要 10 分钟。

yii CComponent组件 实例说明

 

yii中的module,controller都是CComponent的子类,可以说yii的架构基石就是依托在CCompnent基础上的,这里研究下CComponent。另外写一个简单的组件应用示例。希望可以帮助到大家。

component有三个基础特性,属性(Property),事件(Event),行为(Behavior)。就从这三点阐述一下吧,个人感觉掌握了这三点,就基本掌握了component的本质

属性:

故名思意,该特性描述组件的一系列属性。通过 $compontent -> property_name 进行赋值和提取。系统中是通过 __get 和 __set 来实现的。

事件:

事件可以认为是一类特殊的属性。之所以特殊,是因为他可以把事件处理句柄和事件名关联在一起,当事件被唤起时,事件处理句柄被执行。

事件的名字以”on”开头,在__get()和__set()里可以通过这个来区别属性和事件。事件被记录在组件的$_e[]数组中

定义事件时,要有onEventName的方法,这样系统才可以把事件注册具体的句柄上,激发事件时,同样使用onEventName方法,里面调用raiseEvent.

事件句柄必须定义为 function methodName($event)

 

注册事件的方法:

//添加一个全局函数到事件处理

$component-> onBeginRequest=”logRequest”;

//添加一个类静态方法到事件处理

$component-> onBeginRequest=array(“CLog”,” logRequest”);

//添加一个对象方法到事件处理

$component-> onBeginRequest=array($mylog,” logRequest”);

 

唤起事件的方法:

$component ->raiseEvent('onBeginRequest ', $event);

他会自动调用:

logRequest($event), Clog:: logRequest($event)和$mylog.logRequest($event)

行为:

组件的行为是一种不通过继承而扩展组件功能的方法。

行为类必须实现 IBehavior 接口,大多数行为可以从 CBehavior 基类扩展而来。

IBehavior接口提供了4个方法。

attach($component)将自身关联到组件,detach($component) 解除$component关联,getEnabled()和setEnabled()设置行为对象的有效性。

行为对象存放在组件的$_m[]数组里,数组键值为行为名字符串,数组值为行为类对象。

组件通过attachBehavior ($name,$behavior)来扩展一个行为:

例如

$component-> attachBehavior (‘render’,$htmlRender)

为$component添加了一个名字为render的行为,$htmlRender 需是一个实现 IBehavior 接口的对象,或是一个数组:

array( 'class'=>'path.to.BehaviorClass',

   'property1'=>'value1',

   'property2'=>'value2',

   * )

会根据数组的class来创建行为对象并设置属性值。

 

$htmlRender被存储到$_m[‘render’]中。

外部调用一个组件未定义的方法时,魔术方法__call() 会 遍历所有行为对象,如果找到同名方法就调用之。

例如 $htmlRender 有个方法 renderFromFile(),则可以直接当做组件的方法来访问:

$component-> renderFromFile()

 

 

编写一个组件示例,希望可以帮助大家很好的理解

protected/components/TestCom.php

atr来调用 private $atr = ""; public function getAtr(){ return $this -> atr; } #可以通过$com -> atr来调用 public function setAtr($v){ $this -> atr = $v; } public static function eventMethod1($event){ echo "run enentMethod1!/n"; } public function eventMethod2($event){ echo "run enentMethod2!/n"; } public function onTest($event){ $this->raiseEvent('onTest', $event); } public function testEvent(){ ##register event $callback = array(); $callback = array("TestCom","eventMethod1"); $this -> onTest = $callback; $callback = array($this,"eventMethod2"); $this -> onTest = $callback; $this -> onTest(new CEvent()); } public function testBehavior(){ $name = "testBehavior"; $behavior = new TestBehavior(); $this->attachBehavior($name,$behavior); $this -> FunOfTestBehavior(); }}?>

 

protected/components/TestBehavior.php

 

 

protected/controllers/TestController.php

 

atr = "atr"; echo $com -> atr; } public function actionTestEvent(){ $com = new testCom(); $com -> testEvent(); } public function actionTestBehavior(){ $com = new testCom(); $com -> testBehavior(); }}?>

 

参考资料:http://www.yiiframework.com/doc/guide/1.1/en/basics.component

 

转载地址:http://zhzio.baihongyu.com/

你可能感兴趣的文章
Shader 学习笔记 ---Depth of Field 介绍
查看>>
星级 评分
查看>>
通信协议之广播---recvfrom 放回客户端的ip地址第一次全为0.0.0.0
查看>>
php 常用函数
查看>>
oracle-3-子查询和常用函数
查看>>
item2
查看>>
云计算面临安全挑战
查看>>
C# 线程手册 第三章 使用线程 Monitor.TryEnter()
查看>>
分享11个超棒的移动应用(mobile apps)开发解决方案
查看>>
C/C++获取文件大小
查看>>
深入理解Java内存模型(五)——锁
查看>>
Chalubo僵尸网络来袭 IOT设备或将受到DDoS攻击
查看>>
如何实现百万TPS?详解JMQ4的存储设计
查看>>
这么说吧,NIO很简单,其实就是个牛逼IO
查看>>
七、【应用的主要框架】
查看>>
使用Python快速获取公众号文章定制电子书(二)
查看>>
iOS下JS与OC互相调用(七)--Cordova 基础
查看>>
Three.js 关于立方体贴图产生边缘锯齿问题
查看>>
Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力
查看>>
【开发问题记录①】关于滑动CollectionView时ContentSize变化的问题
查看>>