本文实例讲述了Yii Framework框架中的事件event原理与应用。分享给大家供大家参考,具体如下:
再谈Yii Framework中的事件event,我写过的关于Yii事件event的另一篇文章
Yii Framework 中事件和行为的区别和应用 http://www.zzvips.com/article/70698.html
假设有类MyComponent,它是继承于CComponent,通过查看 CComponent 的 __set() 方法,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public function __set( $name , $value ) { $setter = 'set' . $name ; if (method_exists( $this , $setter )) return $this -> $setter ( $value ); else if ( strncasecmp ( $name , 'on' ,2)===0 && method_exists( $this , $name )) { // duplicating getEventHandlers() here for performance $name = strtolower ( $name ); if (!isset( $this ->_e[ $name ])) $this ->_e[ $name ]= new CList; return $this ->_e[ $name ]->add( $value ); } else if ( is_array ( $this ->_m)) { foreach ( $this ->_m as $object ) { if ( $object ->getEnabled() && (property_exists( $object , $name ) || $object ->canSetProperty( $name ))) return $object -> $name = $value ; } } if (method_exists( $this , 'get' . $name )) throw new CException(Yii::t( 'yii' , 'Property "{class}.{property}" is read only.' , array ( '{class}' =>get_class( $this ), '{property}' => $name ))); else throw new CException(Yii::t( 'yii' , 'Property "{class}.{property}" is not defined.' , array ( '{class}' =>get_class( $this ), '{property}' => $name ))); } |
第四行可知,我们可以通过 onXXX 来直接设置事件的。
绑定到全局事件处理
方法一:
直接在main.php里面定义
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/*************************************************** 在我们想要的内容的前后出现了这些代码 只是为了说明,我们添加的内容是要放在 这个配置数据的一维里面。 'import'=>array( 'application.models.*', 'application.components.*', 'application.helpers.*', ), 'defaultController'=>'post', ***************************************************/ //其它代码 'import' => array ( 'application.models.*' , 'application.components.*' , 'application.helpers.*' , ), /************** 这才是我们想要添加的代码 **************/ 'onBeginRequest' => array ( 'MyEventHandler' , 'MyEventHandlerMethod' ), 'defaultController' => 'post' , //其它代码 |
方法二:
1
2
|
//参考自framework/logging/CLogRouter.php的init()方法 Yii::app()->attachEventHandler( 'onEndRequest' , array ( $this , 'processLogs' )); |
绑定到局部事件处理
随时随地无论在controller还是model里面,只要是CComponent的子类,都可以这样定义,
1
|
$myComponent ->onClick = $callback ; |
这里的 $callback 指向了一个有效的 PHP 回调。它可以是一个全局函数也可以是类中的一个方法。
如果是后者,它必须以一个数组的方式提供 : array($object,'methodName')
。
其它文章推荐:
Yii组件的事件机制分析 http://www.zzvips.com/article/70698.html
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/davidhhuan/archive/2012/07/23/2605164.html