jmikola / wildcard-event-dispatcher-bundle
增强Symfony2事件调度器,支持由AMQP主题交换机启发的通配符模式。
Requires
- php: >=5.3.2
- jmikola/wildcard-event-dispatcher: ^1.1.0
- symfony/config: ^2.3 || ^3.0
- symfony/dependency-injection: ^2.3 || ^3.0
- symfony/event-dispatcher: ^2.3 || ^3.0
- symfony/http-kernel: ^2.3 || ^3.0
Requires (Dev)
- symfony/browser-kit: ^2.3 || ^3.0
- symfony/class-loader: ^2.3 || ^3.0
- symfony/framework-bundle: ^2.3 || ^3.0
- symfony/yaml: ^2.3 || ^3.0
This package is auto-updated.
Last update: 2024-09-06 08:42:07 UTC
README
此包将 WildcardEventDispatcher 库与Symfony集成,并允许使用受AMQP主题交换机启发的通配符模式分配事件监听器。
Symfony的事件调度器组件和框架现有的事件命名约定(点分隔的单词)已经与AMQP消息路由键非常相似。此包旨在少量使用,其中通配符可以替换中央监听器(如活动日志服务)的冗长配置。
有关此包的一些背景信息可以在symfony-devs 邮件列表中找到。
兼容性
此包需要Symfony 2.3或更高版本。
配置
没有配置选项。Symfony将自动加载包的依赖注入扩展。
该扩展将创建一个服务,它通过 组合 现有的 event_dispatcher
服务并假定其服务ID。根据是否启用调试模式,此包可能会包装FrameworkBundle的ContainerAwareEventDispatcher
或TraceableEventDispatcher
类的一个实例。
监听通配符事件模式
此包允许您在分配事件监听器时使用单词 *
和多词 #
通配符。通配符运算符在WildcardEventDispatcher 的文档中有更详细的描述。
单词通配符
考虑当前 acme.listener
服务正在监听多个 core
事件的情况
<!-- Acme/MainBundle/Resources/config/listener.xml --> <service id="acme.listener" class="Acme/MainBundle/Listener"> <tag name="kernel.listener" event="core.exception" method="onCoreEvent" /> <tag name="kernel.listener" event="core.request" method="onCoreEvent" /> <tag name="kernel.listener" event="core.response" method="onCoreEvent" /> </service>
您可以将上述配置重构为使用单词 *
通配符
<!-- Acme/MainBundle/Resources/config/listener.xml --> <service id="acme.listener" class="Acme/MainBundle/Listener"> <tag name="kernel.listener" event="core.*" method="onCoreEvent" /> </service>
此监听器现在将观察所有以 core.
开头并跟另一个单词的事件。名为 core
的事件也将与该模式匹配。
多词通配符
假设您的应用程序中有一个名为 core.foo.bar
的事件。前面提到的 core.*
模式不会匹配此事件。您可以
<!-- Acme/MainBundle/Resources/config/listener.xml --> <service id="acme.listener" class="Acme/MainBundle/Listener"> <tag name="kernel.listener" event="core.*.*" method="onCoreEvent" /> </service>
此语法将匹配 core.foo
和 core.foo.bar
,但 core
将不再匹配(假设存在这样的事件);然而,多词 #
通配符允许匹配所有这些事件名称
<!-- Acme/MainBundle/Resources/config/listener.xml --> <service id="acme.listener" class="Acme/MainBundle/Listener"> <tag name="kernel.listener" event="core.#" method="onCoreEvent" /> </service>
您还可以使用 #
通配符来监听应用程序中的 所有 事件
<!-- Acme/MainBundle/Resources/config/listener.xml --> <service id="acme.listener" class="Acme/MainBundle/Listener"> <tag name="kernel.listener" event="#" method="onAnyEvent" /> </service>