aneek / slim-event-dispatcher
League Event 和 Slim Framework 之间的事件调度器桥接器。
1.0
2017-09-27 07:58 UTC
Requires
- php: >= 5.6
- league/event: ^2.1
- slim/slim: ^3.0
Requires (Dev)
- phpunit/phpunit: 5.7.22
- symfony/var-dumper: ^3.0
This package is not auto-updated.
Last update: 2024-09-29 04:46:14 UTC
README
该库是 League\Event
在 Slim Framework
上的实现。它与 Slim 的最新版本(V3)兼容。
安装
建议您使用 Composer 安装 Slim Event Dispatcher。
$ composer require aneek/slim-event-dispatcher "^1.0"
这将安装 Slim Event Dispatcher 及所有必需的依赖项。此包需要 PHP 5.6 或更高版本。虽然不推荐在 PHP 7.0 及以上版本中使用 1.x 版本。下一个主要版本(v2.x)将支持 PHP 7.x。
使用方法
这不是一个 Slim 中间件,而是一个通过扩展 SlimEventManager
类并将其添加到 Slim 的依赖容器中与您的 Slim 应用程序集成的包。目前有两种集成方式。
使用类构造函数
Slim\Event\SlimEventManager
类在其构造函数中接受一个数组参数,并初始化所有监听器(有关 监听器 的更多信息)。
以下文件内容可作为 Slim Framework 的应用程序加载文件
<?php use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use Slim\Container; use Slim\App; use Slim\Event\SlimEventManager; require 'vendor/autoload.php'; $settings = [ 'settings' => [ 'determineRouteBeforeAppMiddleware' => true, 'displayErrorDetails' => true, ], ]; // Array of event Listeners $events = [ 'event.one' => [ // First element is the FQCN class. This element is mandatory. // Second element is the listener priority but this is not mandatory. [\FooListener::class, 100], [\BarListener::class] ], 'event.two' => [ [\BazListener::class] ] ]; $container = new Container(); $container['event_manager'] = function ($c) use($events) { $emitter = new SlimEventManager($events); return $emitter; }; $app = new App($container); $app->get('/hello/{name}', function (Request $request, Response $response, $args) { $this->get('event_manager')->emit('event.one', 'parameter_one', 'parameter_two'); return $response->write("Hello, " . $args['name']); }); $app->run();
使用带可调用对象的 add
方法
<?php use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Message\ResponseInterface as Response; use Slim\Container; use Slim\App; use Slim\Event\SlimEventManager; require 'vendor/autoload.php'; $settings = [ 'settings' => [ 'determineRouteBeforeAppMiddleware' => true, 'displayErrorDetails' => true, ], ]; $container = new Container(); // Add Event manager to dependency. $container['event_manager'] = function ($c) { $emitter = new SlimEventManager(); return $emitter; }; $app = new App($container); $app->getContainer()->get('event_manager')->add('event.one', function ($event, $param_1, $param_2) { // Do processing of the event. echo $param_1; // Prints parameter_one echo $param_2; // Prints parameter_two }); $app->get('/hello/{name}', function (Request $request, Response $response, $args) { $this->get('event_manager')->emit('event.one', 'parameter_one', 'parameter_two'); return $response->write("Hello, " . $args['name']); }); $app->run();
创建事件或监听器
可以通过遵循以下来自 League\Event
的指南创建 Events
或 Listeners
。
问题
请打开一个新的问题,我将很高兴查看。