aneek/slim-event-dispatcher

League Event 和 Slim Framework 之间的事件调度器桥接器。

1.0 2017-09-27 07:58 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:46:14 UTC


README

Build Status

该库是 League\EventSlim 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 的指南创建 EventsListeners

问题

请打开一个新的问题,我将很高兴查看。