fuelphp / event
此包已被废弃且不再维护。没有建议的替代包。
框架无关的事件库。
dev-master
2015-01-01 15:44 UTC
Requires
- php: >=5.4
Requires (Dev)
- codeception/codeception: ~2.0
This package is auto-updated.
Last update: 2023-01-30 20:25:45 UTC
README
PHP中的快速优雅的事件管理。具有强大功能的高效接口。
包含内容
简单示例
<?php $container = new Fuel\Event\Container(); $container->on('my_event', function($event){ // Act on the event }); $container->trigger('my_event');
特殊的 'all' 事件
为 Container
和 Queue
保留的唯一事件是 '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');