23. Yii 组件事件

组件事件

1. 定义事件 onClick();
2. 注册事件句柄
3. 触发事件

这里写图片描述

[php]
public function onClicked($event)
{
    $this->raiseEvent('onClicked', $event);
}

这里作为事件参数的 $event 是 [CEvent] 或其子类的实例。

我们可以附加一个方法到此 event,如下所示:

[php]
$component->onClicked=$callback;

这里的 $callback 指向了一个有效的 PHP 回调。它可以是一个全局函数也可以是类中的一个方法。 
如果是后者,它必须以一个数组的方式提供: array($object,'methodName').
事件句柄的结构如下:

[php]
function methodName($event)
{
    ......
}

这里的 $event 即描述事件的参数(它来源于 raiseEvent() 调用)。$event 参数是 [CEvent] 或其子类的实例。 
至少,它包含了关于谁触发了此事件的信息。

从版本 1.0.10 开始,事件句柄也可以是一个PHP 5.3以后支持的匿名函数。例如

[php]
$component->onClicked=function($event) {
    ......
}

如果我们现在调用 onClicked(),onClicked 事件将被触发(在 onClicked() 中), 附属的事件句柄将被自动调用。

一个事件可以绑定多个句柄。当事件触发时, 这些句柄将被按照它们绑定到事件时的顺序依次执行。
如果句柄决定组织后续句柄被执行,它可以设置 [$event->handled|CEvent::handled] 为 true

这里写图片描述


示例:
1.事件的定义:
这里写图片描述

2.注册事件句柄

$app = Yii::createWebApplication($config);

$app->onBeginRequest = function($event){
    $msg = print_r($event,true);
    file_put_contents(dirname(YII_PATH).'/test.txt',$msg);
};

$app->run();

3.触发事件:
这里写图片描述

结果:
这里写图片描述


原理分析:

Event中往往有两个角色,一个是Event,一个是Event Handler。为什么需要两个?

原因很容易理解,Event只是说明这件事情发生了,但是没有说怎么处理。这部分处理的工作当然是留给了Event Handler了。

1.在Yii中Event一般是在CComponet的子类中扩展出来的,一般以on开头。

public function onClick($event)  
 {  
     $this->raiseEvent('onClick',$event);  
 }  

上面是一段例子,用来定义Event的。但是你要注意这里的$event可不是我们前面说的Event,而应该说$event和这个onClick函数整体构成了一个Event,

其实这也很容易理解,因为一个Event的构成需要一个标志说明Event发生,还需要一些数据来说明这个Event发生时的情况。

这里写图片描述

这里写图片描述

Event Handle 存放到 $this->_e[$eventName] = EventHandle 中。
EventHandle  是一个 CList 类。

这里写图片描述

这里写图片描述

调用时
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


http://www.yiichina.com/doc/guide/1.1/basics.component

http://www.phpstudio.info/show-155-1293-1.html

http://blog.csdn.net/chengfei112233/article/details/7659768

http://stackoverflow.com/questions/7410045/how-to-use-events-in-yii

http://zhangxugg-163-com.iteye.com/blog/1830229

http://www.tuicool.com/articles/7vamYb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值