| 状态 | 草稿 |
|---|---|
| Todo | Proof read |
| 官方最后更新时间 | 2008/09/29 17:39 |
首先是为事件概述的一个概述,请看 Event_handler 以及 Event_loop。 Kohana 事件为排队执行,类似于堆栈。简单的理解就是默认情况下,在现有事件处理完毕之后才会处理新的事件。
Kohana 事件包含一个独一无二的名字以及 callback。默认情况下,是一些由 Kohana 定义的事件。名称完全是自由的,但是必须遵守 prefix.name (前缀.名字)的格式,所有预定义的事件均为 system.name,比如
所有的方式都是静态的(static),并且事件绝不会被实例化。
添加一个新的 callback 事件。如果事件不存在则会创建一个新的。
// 在控制器方法执行后调用 "foo" 函数 Event::add('system.post_controller', 'foo'); // 在控制器方法执行后调用 "Foo::bar" 静态方法 Event::add('system.post_controller', array('foo', 'bar')); // 当输出呈现时在 "$foo" 调用 "bar" 方法 Event::add('system.display', array($foo, 'bar'));
你也可以使用下面的方式创建新的事件:
// 创建一个自定义的 user.login 事件 Event::add('user.login', array($user, 'login'));
在另外一个事件的 callback 之前立即添加一个 callback。
// 在 "foo" 之前添加 "faa" 函数执行。 Event::add_before('system.post_controller', 'foo', 'faa');
如果在事件插入前并不存在,add_before 会新添一个功能一样的。
在另外一个事件的 callback 之后立即添加一个 callback。
// 在 "foo" 之后添加 "fzz" 函数执行。 Event::add_after('system.post_controller', 'foo', 'fzz');
如果在事件插入前并不存在,add_after 会新添一个功能一样的。
使用 callback 替换事件的 另外一个 callback。
// 使用 "oof" 函数体会 "foo" 函数 Event::replace('system.post_controller', 'foo', 'oof');
如果在事件在替换是没有发现,事件不会在添加。
为callbacks 返回一个简单数组
// 为 system.post_controller 返回 $events = Event::get('system.post_controller'); // 循环每一个事件并调用它 foreach ($events as $event) { $return_value = call_user_func($event); }
当没有事件存在或者返回空数组,如果需要验证时间需要使用 empty 进行验证
清除一个或所有的事件的 callbacks。
// 为system.post_controller 清除 "oof" 函数。 Event::clear('system.post_controller', 'oof');
如果方法调用时没有填写第二个参数,则会清除整个事件中的 callbacks。
执行事件所有的 callbacks。
// 执行 system.post_controller 事件 Event::run('system.post_controller');
检查是否有制定的事件在运行。可以很有效的控制只能运行一个此事件。
// 测试这个事件是否在运行 if (Event::has_run('system.post_controller')) { echo 'post_controller has been run.'; } // 如果没有在运行就运行此事件 Event::has_run('system.post_controller') or Event::run('system.post_controller');
Event::$data 是一个特殊变量,他只能在使用 Event::run 时使用。 data是参考指派的,并且可以控制所有的 callbacks。
// 调试 data echo Kohana::debug($data); // 使用 data 执行 post_controller 事件 Event::run('system.post_controller', $data); // 显示改变的 data echo Kohana::debug($data);
所有的callbacks 运行之后事件的数据会被立即清除掉,只能在并且 callback 执行过程中访问。