robinvdvleuten/lazy-event-dispatcher

此包已被废弃,不再维护。未建议替代包。

一个事件调度器,它会在刷新之前保持任何事件。

v1.1.0 2019-01-28 10:07 UTC

This package is auto-updated.

Last update: 2022-02-04 09:35:07 UTC


README

一个事件调度器,它会在刷新之前保持任何事件。

Latest Stable Version Build Status

使用场景

如果你想在响应已流回客户端之后,使用 kernel.terminate 事件执行一些“重”操作。Symfony 默认已这样做,但通过此监听器,你可以支持任何自定义事件类。

安装

推荐通过 Composer 安装库。

composer require robinvdvleuten/lazy-event-dispatcher

然后安装监听器作为服务;

services:
    app.lazy_event_dispatcher:
        class: Rvdv\LazyEventDispatcher\LazyEventDispatcher
        arguments:
          - "@event_dispatcher"
        tags:
          - { name: kernel.event_listener, event: kernel.terminate, method: flush }

然后添加一个自定义编译器过程以拥有新的事件监听器类型;

<?php

namespace AppBundle;

use Symfony\Component\DependencyInjection\Compiler\PassConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\EventDispatcher\DependencyInjection\RegisterListenersPass;
use Symfony\Component\HttpKernel\Bundle\Bundle;

class AppBundle extends Bundle
{
    /**
     * {@inheritdoc}
     */
    public function build(ContainerBuilder $container)
    {
        $container->addCompilerPass(
            new RegisterListenersPass('app.lazy_event_dispatcher', 'lazy.event_listener', 'lazy.event_subscriber'),
            PassConfig::TYPE_BEFORE_REMOVING
        );
    }
}

然后你可以注册任何“延迟”事件监听器,如下所示;

services:
    app.custom_event_listener:
        class: AppBundle\EventListener\CustomEventListener
        tags:
          - { name: lazy.event_listener, event: custom_event }

许可证

MIT © Robin van der Vleuten