narrator / narrator-bundle
事件库包
v0.6.2
2021-02-02 21:04 UTC
Requires
- php: ^5.6|^7.0
- narrator/narrator: ^0.4
- symfony/config: ^2.3|^3.0|^4.0
- symfony/dependency-injection: ^2.3|^3.0|^4.0
- symfony/http-kernel: ^2.3|^3.0|^4.0
Requires (Dev)
- mikey179/vfsstream: ^1.6
- phpunit/phpunit: ^5.6
- symfony/expression-language: ^3.1
README
安装
使用 Composer 添加项目依赖
$ composer require narrator/narrator-bundle
然后通过将包添加到 app/AppKernel.php
文件来注册包
<?php
// app/AppKernel.php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
// ...
new Mleko\Narrator\Bundle\NarratorBundle(),
);
// ...
}
// ...
}
配置监听器
NarratorBundle 从依赖容器加载监听器。要将服务用作监听器,您只需添加标记服务为监听器。
如果您有服务
<service class="Foo\BarBundle\UserInvitationSender">
// .. arguments, configuration
</service>
class UserInvitationSender {
...
public function handle(\Foo\BarBundle\UserRegistered $event){
...
}
}
要将其用作监听器,请添加标签 narrator.listener
。
<service class="Foo\BarBundle\UserInvitationSender">
// .. arguments, configuration
<tag name="narrator.listener"/>
</service>
监听器无需在 handle 方法中定义参数类型。
class UserInvitationSender {
...
public function handle($event){
...
}
}
可以将事件类型作为标签属性 event
传递,该属性应为事件的完全限定名称 (FQCN)。
<service class="Foo\BarBundle\UserInvitationSender">
// .. arguments, configuration
<tag name="narrator.listener" event="Foo\BarBundle\UserRegistered"/>
</service>
默认情况下,事件将传递到已注册监听器的 handle
方法。方法名可以使用 method
参数进行更改。
<service class="Foo\BarBundle\UserInvitationSender">
// .. arguments, configuration
<tag name="narrator.listener" event="Foo\BarBundle\UserRegistered" method="handleRegistration"/>
</service>
使用 method
参数,可以使用单个服务处理不同的事件。
<service class="Foo\BarBundle\NotificationSender">
// .. arguments, configuration
<tag name="narrator.listener" event="Foo\BarBundle\UserRegistered" method="handleRegistration"/>
<tag name="narrator.listener" event="Foo\BarBundle\UserLoggedIn" method="handleLogin"/>
</service>
配置事件总线
此包预先配置了一个名为 "default" 并别名为 narrator.event_bus
的事件总线。您可能希望使用更多的事件总线或重新配置 "default" 事件总线。您可以通过配置来实现这一点
narrator:
event_bus:
default:
resolver:
type: instanceof
public: true
named: ~
此配置定义了两个事件总线:"default" 和 "named"。这些事件总线将注册为 narrator.event_bus.default
和 narrator.event_bus.named
。 narrator.event_bus.default
将使用 InstanceOf
解析器,因此它将支持事件继承;narrator.event_bus.named
将使用基于严格事件名称比较的默认配置。默认情况下,所有事件总线都注册为私有服务,您可以使用 public
参数按事件总线逐个更改。