fergusinlondon / events
一个非常简单的事件处理系统...简单到几乎像一个玩具。
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- henrikbjorn/phpspec-code-coverage: ^2.0
- phpspec/phpspec: ~2.0
- squizlabs/php_codesniffer: 2.*
This package is not auto-updated.
Last update: 2024-09-24 23:11:56 UTC
README
这是一个非常简单的事件注册和处理系统,总共由两个对象组成:一个注册对象和一个可继承的基本处理器。
这个项目的初衷是写一篇关于编写小型模块化组件、将它们打包成composer模块,并随后使用持续集成系统来确保它们状态的博客文章的三部分。
尽管有这个原始意图,如果你需要一个注册和处理事件的无与伦比轻量级系统,那么这很可能就足够了!
另一方面,如果你正在驱动一个更大且事件过多的东西,那么你可能希望考虑一个将事件编译成一个映射的选项 - 这可以提供更好的性能。
博客文章
博客文章尚未撰写,但将在Fergus.London上提供。
安装
通过Composer安装,作为fergusinlondon/events
。
$ composer require fergusinlondon/events=dev-master
警告:此Composer开发构建已超过60天。建议通过运行 "/usr/local/bin/composer self-update" 来更新它以获取最新版本。
./composer.json已更新正在加载包含包信息的composer仓库
更新依赖项(包括require-dev)
- 安装fergusinlondon/events (dev-master b245be2)
克隆b245be2bae5e546cbd33a279c17ff0652aca33f8
示例
最好的文档形式通常是示例。
基本
一个基本示例可能是一个用户注册/创建事件,其中当用户注册到您的应用程序时,会触发一个事件,允许应用程序的其他部分以某种方式做出响应。
use FergusInLondon\Events\Registry; use FergusInLondon\Events\Handler; $registry = new Registry(); $registry->registerHandler("user.creation", new Handler(function($user){ $this->container->get('email')->sendWelcome( $user->email_address ); })); $registry->registerHandler("", new Handler(function($user){ $this->container->get('logger')->info( sprintf("New user registration: %s (%d)", $user->name, $user->id) ); }));
同时,在我们的相关控制器中,我们只需在需要时触发事件...
class UserController { public function create() { // ... $user->save(); $registry->trigger("user.creation", $user); } }
完整API
以下示例展示了整个API和功能集。这些对象上有公开的方法,不应该使用:用于registry<->handler
通信。这些方法将在源代码中标记为此类。
use FergusInLondon\Events\Registry; use FergusInLondon\Events\Handler; $registry = new Registry(); // As Handler objects are - by default - initialised with a Callable parameter. This is overridable via subclassing. $registry->registerHandler("event.demo", new Handler(function(){ echo "See, this is a very simple event handler.\n"; })); $registry->registerHandler("event.never", new Handler(function(){ echo "This will never run, as we'll clear all handlers first.\n"; })); // Handlers can be instantiated inline, and access parameters passed in via Registry::trigger() $userDeleteHandler = new Handler(function($name, $id){ printf("User created: %s (%d)\n", $name, $id); }); // Handlers also gain the context of the Handler object. Especially useful if you need to subclass and/or access utility methods. $userCreateHandler = new Handler(function($name, $id){ printf("User created: %s (%d)\n", $name, $id); printf( "Handlers have access to the current Handler object too. (i.e %s)", $this->registryIdentifier ); }); // Registering instantiated handlers. $registry->registerHandler("user.create", $userCreateHandler); $registry->registerHandler("user.delete", $userDeleteHandler); // The clearHandlers method is capable of $registry->trigger("event.demo"); $registry->clearHandlers("event.demo"); $registry->trigger("event.demo"); // It's possible to trigger events whilst passing data to the handler $user = ["name" => "J. Smith", "id" => 101]; $registry->trigger("user.create", $user); $registry->trigger("user.delete", $user); // If clearHandlers is called without any parameters, all handlers are cleared $registry->clearHandlers(); $registry->trigger("event.never");
测试
测试通过PHPSpec进行,并确保公共接口按预期工作,但不对内部工作方式做出保证。因此,如果您希望使用此项目,请坚持使用上述示例中看到的公共API。
此项目的完整构建历史可在Travis CI上找到。
许可证
此存储库中包含的所有代码均受MIT许可证许可。
版权所有 © 2016 Fergus Morrow fergus@fergus.london
特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人免费使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向获得软件的人提供副本,前提是
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
本软件按“现状”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权持有人不对任何索赔、损害或其他责任承担责任,无论是基于合同、侵权或其他法律行为,也不论是源于、因之或与此软件的使用或其他相关操作有关。