定义事件
系统提供了两种定义事件的方式,一种是定义长期事件$fd = Event::on($event, [$class, $method])
,直到被off之前都会生效。
参数分别为事件名
,方法[类,方法名]
方法可以不传,默认为Logger::event()
方法,会在console中打印
$fd
返回的是该事件的操作符。在调用off方法时,可以通过传递该操作符解绑该事件。
namespace app\controller;/** * 主页Action * @property \app\service\testService $testService */ class testActionextends baseAction- {
//构造函数 public function init ()- {
// 要触发beforeAction事件,可在init里定义,会在init之后被触发 - Event::
on (beforeAction ,array ($this ,'test_event' ));- }
//默认路由index public function action_index ()- {
// 绑定testService里的my_event1方法 和 my_event2方法 到 myEvent事件中,两个方法都会被执行,按绑定先后顺序执行 $fd1 = Event::on ('myEvent' ,array ($this ->testService ,'my_event1' ));$fd2 = Event::on ('myEvent' ,array ($this ->testService ,'my_event2' ));// do something ..... // 解绑myEvent事件的 my_event1方法 - Event::
off ('myEvent' ,$fd1 );// 解绑myEvent事件,所有绑定在该事件上的方法都不会再被执行 - Event::
off ('myEvent' );return $this ->error ('测试一下' );- }
// 自定义的事件类 public function test_event ($event )- {
// addLog为写日志的方法 - Logger::
addLog ('触发beforeAction事件' );- }
- }
另一种绑定则为一次绑定事件Event::one()
,调用参数相同,返回$fd
操作符,当该事件被触发一次后会自动解绑
$fd = Event::one ('myEvent' ,array ($this ,'my_event' ));
当然如果想要绑定多次但非长期绑定时,系统也提供了bind
方法,参数用法类似。
// 第一个参数绑定方法,第二个为事件名,第三个为绑定次数,触发次数满后自动释放 $fd = Event::bind (array ($this ,'my_event' ),'myEvent' ,$times );