螺旋包/联盟事件

Spiral 框架的联盟事件网关

1.0.1 2022-09-14 08:02 UTC

README

PHP Latest Version on Packagist GitHub Tests Action Status Total Downloads

需求

请确保您的服务器已配置以下 PHP 版本和扩展

  • PHP 8.1+
  • Spiral 框架 3.0+

安装

您可以通过 composer 安装此包

composer require spiral-packages/league-event

安装包后,您需要从包中注册引导加载器。

protected const LOAD = [
    // ...
    \Spiral\League\Event\Bootloader\EventBootloader::class,
];

注意 如果您正在使用 spiral-packages/discoverer,则无需自行注册引导加载器。

用法

事件

一个事件可以用一个简单的类表示

namespace Spiral\Router\Event;

use Spiral\Router\RouteInterface;

final class RouteFound
{
    public function __construct(
        public readonly RouteInterface $route
    ) {
    }
}

派发事件

$this->container->get(EventDispatcherInterface::class)->dispatch(new RouteNotFound($request));

监听器

一个监听器可以用一个简单的类表示,其中包含一个将被调用来处理事件的函数。函数名称可以在监听器属性参数或配置文件中配置(默认为 __invoke

namespace App\Listener;

use Spiral\Events\Attribute\Listener;
use Spiral\Router\Event\RouteFound;

class RouteListener
{
    public function __invoke(RouteFound $event): void
    {
        // ...
    }
}

通过配置文件注册监听器

// file app/config/events.php

use App\Listener\RouteListener;
use Spiral\Events\Config\EventListener;
use Spiral\Router\Event\RouteFound;

return [
    'listeners' => [
        // without any options
        RouteFound::class => [
            RouteListener::class,
        ],

        // OR

        // with additional options
        RouteFound::class => [
            new EventListener(
                listener: RouteListener::class,
                method: 'onRouteFound',
                priority: 1
            ),
        ],
    ]
];

通过属性注册监听器

该属性可以不使用任何额外参数使用。然后,将使用方法名称 __invoke 和方法参数的类型中的事件

namespace App\Listener;

use Spiral\Events\Attribute\Listener;
use Spiral\Router\Event\RouteFound;

#[Listener]
class RouteListener
{
    public function __invoke(RouteFound $event): void
    {
        // ...
    }
}

所有可用选项

namespace App\Listener;

use Spiral\Events\Attribute\Listener;
use Spiral\Router\Event\RouteFound;

#[Listener(event: RouteFound::class, method: 'onRouteFound', priority: 1)]
class RouteListener
{
    public function onRouteFound(RouteFound $event): void
    {
        // ...
    }
}

该属性可以直接用于方法,然后可以省略方法名称

namespace App\Listener;

use Spiral\Events\Attribute\Listener;
use Spiral\Router\Event\RouteFound;

class RouteListener
{
    #[Listener(priority: 1)]
    public function onRouteFound(RouteFound $event): void
    {
        // ...
    }
}

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全漏洞

请查看 我们的安全策略 了解如何报告安全漏洞。

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件