fuelphp/event

此包已被废弃且不再维护。没有建议的替代包。

框架无关的事件库。

dev-master 2015-01-01 15:44 UTC

This package is auto-updated.

Last update: 2023-01-30 20:25:45 UTC


README

Build Status Code Coverage Code Quality HHVM Status

PHP中的快速优雅的事件管理。具有强大功能的高效接口。

包含内容

  • 创建事件容器以方便管理。
  • 注册和注销事件。
  • 事件优先级。
  • 可以阻止事件传播。
  • 为可事件化对象提供的特质。
  • 将上下文绑定到事件处理器。
  • 队列(文档)。
  • 通过方便的门面(文档)进行轻松访问

简单示例

<?php

$container = new Fuel\Event\Container();

$container->on('my_event', function($event){
	// Act on the event
});

$container->trigger('my_event');

特殊的 'all' 事件

ContainerQueue 保留的唯一事件是 'all' 事件。此事件的监听器将在每次事件触发时被触发

$container->on('all', function(){
	echo 'This will also be fired!';
});

$container->trigger('event');

注销事件

// Unregister all handlers for a specific event
$container->off('my_event');

// Unregister all handlers with a specific handler
$container->off(null, $my_handler);

// Unregister all handlers with a specific context
$conainer->off(null, null, $context);

添加上下文

通过提供对象作为回调上下文,可以设置处理程序(闭包)内部 $this 的值。

$container->on('my_event', function($event){
	// $this is now $myObject
}, $myObject);

优先级排序事件

可以在 ->on 方法中添加一个优先级数字来对事件进行优先级排序。

$container->on('my_event', function(){
	// This will be run last
}, 1);

$container->on('my_event', function(){
	// This will be run first
}, 2);

结合上下文和优先级一起使用

您还可以结合上下文和优先级。在这种情况下,首先定义上下文,然后像这样提供优先级

$container->on('my_event', function(){
	// Do something
}, $context, 3);

触发事件

您可以这样触发一个事件

$container->trigger('my_event');

在某些情况下,您可能希望将参数传递给回调,每个事件名称之后的参数都将传递给处理器。这些参数将附加到用于触发处理器的参数数组中。第一个参数始终是事件对象。以下是您在 ->trigger() 中提供的参数。

$container->on('my_event', function($event, $param1, $param2){
	// do stuff with $param1 and $param2
});

// Trigger the event with params.
$container->trigger('my_event', 'param 1', 'param 2');

阻止事件传播

您可以通过在事件对象上调用 stopPropagation 来断开事件监听器链。

$container->on('my_event', function($e){
	$event->stopPropagation();
});

$container->on('my_event', function($e){
	// This will not get executed.
});

$container->trigger('my_event');

获取结果

当事件被触发时,所有返回值将被收集并返回。

$container->on('my_event', function(){
	return 1;
});

$container->on('my_event', function(){
	return 2;
});

$container->on('my_event', function(){
	return 3;
});

$result = $container->trigger('my_event');
// [1, 2, 3]

可事件化对象

PHP 5.4 给我们带来了 traits,一种共享功能并允许多重继承的出色方式。当模型使用 Fuel\Event\Eventable 特质时,模型可以成为可事件化的。使用它非常简单。

实现特质

class EventableObject
{
	// Incluse/use the trait
	use \Fuel\Event\EventTrait;
}

// Get a new instance.
$myObject = new EventableObject();

现在,您的模型/对象实例在底层拥有了事件处理能力。因此,以下功能现在成为可能:

$myObject = new EventableObject();

$myObject->on('event', function($event){
	// act on the event
});

配置选项

有2个配置选项可以使得与事件驱动的对象一起工作更加容易,这些选项可以:

  • 使对象自我绑定,
  • 自动将自己添加到参数数组中。

自我绑定对象

class EventableObject
{
	use Fuel\Event\EventTrait;

	// Set to true to bind itself as the callback context.
	protected $_eventBindSelf = true;
}

$myObject = new EventableObject();

$myObject->on('event', function(){
	// $this is now $myObject
});

您仍然可以通过提供上下文来覆盖它。

$myObject->on('event', function(){
	// $this is now $otherObject
}, $otherObject);

自我前置对象

当您想将模型添加到参数数组中时使用此功能。

<?php

class EventableObject
{
	use Fuel\Event\EventTrait;

	// Set to true to prepend itself to the arguments array.
	protected $_eventPrependSelf = true;
}

$object = new EventableObject();

$object->on('event', function($event, $self){
	// $self now is $object
});

当向->trigger方法提供参数时,这些参数将在事件和模型之后附加。

$object->on('event', function($event, $self, $param1, $param2){
	// Act on the event.
});

$object->trigger('event', 'param 1', 'param 2');

享受吧!

关于此包的任何问题,请加入freenode.net上的#fuelphp IRC频道,寻找FrenkyNet。