状态 草稿
Todo Proof read
官方最后更新时间 2008/09/29 17:39

事件类(Event Class)

首先是为事件概述的一个概述,请看 Event_handler 以及 Event_loop。 Kohana 事件为排队执行,类似于堆栈。简单的理解就是默认情况下,在现有事件处理完毕之后才会处理新的事件。

什么是事件?

Kohana 事件包含一个独一无二的名字以及 callback。默认情况下,是一些由 Kohana 定义的事件。名称完全是自由的,但是必须遵守 prefix.name (前缀.名字)的格式,所有预定义的事件均为 system.name,比如

方法

所有的方式都是静态的(static),并且事件绝不会被实例化。

add

添加一个新的 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'));

add_before

在另外一个事件的 callback 之前立即添加一个 callback。

// 在 "foo" 之前添加 "faa" 函数执行。
Event::add_before('system.post_controller', 'foo', 'faa');

如果在事件插入前并不存在,add_before 会新添一个功能一样的。

add_after

在另外一个事件的 callback 之后立即添加一个 callback。

// 在 "foo" 之后添加 "fzz" 函数执行。
Event::add_after('system.post_controller', 'foo', 'fzz');

如果在事件插入前并不存在,add_after 会新添一个功能一样的。

replace

使用 callback 替换事件的 另外一个 callback。

// 使用 "oof" 函数体会 "foo" 函数
Event::replace('system.post_controller', 'foo', 'oof');

如果在事件在替换是没有发现,事件不会在添加。

get

为callbacks 返回一个简单数组

// 为 system.post_controller 返回 
$events = Event::get('system.post_controller');
 
// 循环每一个事件并调用它
foreach ($events as $event)
{
    $return_value = call_user_func($event);
}

当没有事件存在或者返回空数组,如果需要验证时间需要使用 empty 进行验证

clear

清除一个或所有的事件的 callbacks。

// 为system.post_controller 清除 "oof" 函数。 
Event::clear('system.post_controller', 'oof');

如果方法调用时没有填写第二个参数,则会清除整个事件中的 callbacks。

run

执行事件所有的 callbacks。

// 执行 system.post_controller 事件
Event::run('system.post_controller');

has_run

检查是否有制定的事件在运行。可以很有效的控制只能运行一个此事件。

// 测试这个事件是否在运行
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');

Data

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 执行过程中访问。

core/event.txt · 最后更改: 2008/10/24 03:34 由 icyleaf