wyrihaximus/broadcast

✨ 在composer安装/更新时静态编译(异步)事件分发器

资助包维护!
WyriHaximus

安装: 23,418

依赖关系: 7

建议者: 0

安全: 0

星标: 7

关注者: 3

分支: 0

开放问题: 4

类型:composer-plugin


README

✨ 在composer安装/更新时静态编译事件分发器

Continuous Integration Latest Stable Version Total Downloads Type Coverage License

安装

要通过Composer安装,请使用以下命令,它将自动检测最新版本并将其绑定到^

composer require wyrihaximus/broadcast

用法

任何在其composer.json中设置以下内容的包,都会对其自动加载目录和文件进行扫描,查找实现了WyriHaximus\Broadcast\Contracts\Listener的任何类。每个在实现WyriHaximus\Broadcast\Contracts\Listener的类上有具体对象类型提示的公共方法,都将注册为该对象的类型提示的事件监听器。

{
  "extra": {
    "wyrihaximus": {
      "broadcast": {
        "has-listeners": true
      }
    }
  }
}

要使用这些自动收集的事件监听器,请使用WyriHaximus\Broadcast\ContainerListenerProvider,它需要一个PSR-11容器来工作。

以下示例使用了该包中附带的一个示例事件和监听器

use WyriHaximus\Broadcast\ContainerListenerProvider;
use WyriHaximus\Broadcast\Dispatcher;
use WyriHaximus\Broadcast\Dummy\Event;

$event = new Event();

(new Dispatcher(new ContainerListenerProvider($container), $logger))->dispatch($event)

监听器

以下监听器来自我的一个应用程序,它监听初始化和关闭事件。逻辑已被移除,但保留了日志以演示简单的监听器示例。

<?php

declare(strict_types=1);

namespace WyriHaximus\Apps\WyriHaximusNet\GitHub\Ingest;

use Mammatus\LifeCycleEvents\Initialize;
use Mammatus\LifeCycleEvents\Shutdown;
use Psr\Log\LoggerInterface;
use WyriHaximus\Broadcast\Contracts\DoNotHandle;
use WyriHaximus\Broadcast\Contracts\Listener;

final class Consumer implements Listener
{
    private LoggerInterface $logger;

    public function __construct(ConsumerContract $consumer, Producer $producer, LoggerInterface $logger)
    {
        $this->logger   = $logger;
    }

    public function start(Initialize $event): void
    {
        $this->logger->debug('Starting to consume ingested GitHub WebHook events');
    }

    public function handle(GenericEvent|StandardEvent $even): void
    {
        // This handler handles both the GenericEvent and StandardEvent events.
    }

    public function stop(Shutdown $event): void
    {
        $this->logger->debug('Stopping to consume ingested GitHub WebHook events');
    }

    #[DoNotHandle]
    public function doNotHandle(Event $event): void
    {
        // Even through this method accepts a single object we mark not to handle it with the DoNotHandle attribute.
    }
}

异步 & 等待

除了同步PHP事件分发之外,此包还通过ReactPHP的异步包支持异步和等待。

要将类的监听器标记为在纤维中运行,并使分发器等待每个监听器完成后再继续,请使用WyriHaximus\Broadcast\Contracts\AsyncListener标记接口而不是Listener

许可证

MIT许可证(MIT)

版权所有 © 2023 Cees-Jan Kiewiet

特此授予任何人免费获得此软件及其相关文档副本(“软件”)的权利,在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向提供软件的人员这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定目的和无侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论该索赔、损害或其他责任是基于合同、侵权或其他方式产生,源于、因或与软件或其使用或其他交易有关。