感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
EventDispatcher组件提供的Event
基类,被有意设计得简约,为的是能够通过OOP的继承来创建“特定API”的事件对象。有让复杂的程序变得优雅可读的考量。
GenericEvent
类,可以为那些希望在整个程序中“只使用一个事件对象”的人们提供方便。对于很多场景而言它都是极为好用的,因为它遵循的是标准的observer pattern(观察者模式),该模式下的事件对象对event 'subject'进行封装,同时还附加了额外的可选参数。
GenericEvent
除了Event
基类之外还有如下的简单API:
__construct()
:构造器,接收event subject和任意参数。
getSubject()
:得到subject。
setArgument()
:用key来设置一个参数。
setArguments()
:设置参数数组。
getArgument()
:通过key得到参数。
getArguments
:全部参数的Getter方法。
hasArgument()
:如果参数的key存在,返回true。
GenericEvent
还对事件参数实现了ArrayAccess
接口,这为向event subject传递附加参数提供了巨大便利。
以下例程展示的使用场景可以作为(通用事件对象的)灵活性的基本参考。
直接传入一个subject:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | use Symfony\Component\EventDispatcher\GenericEvent;
$event = new GenericEvent($subject);
$dispatcher->dispatch('foo', $event);
class FooListener
{
public function handler(GenericEvent $event)
{
if ($event->getSubject() instanceof Foo) {
// ...
}
}
} |
传入并处理参数时,使用ArrayAccess
接口,即可访问到事件的参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | use Symfony\Component\EventDispatcher\GenericEvent;
$event = new GenericEvent(
$subject,
array('type' => 'foo', 'counter' => 0)
);
$dispatcher->dispatch('foo', $event);
var_dump($event['counter']);
class FooListener
{
public function handler(GenericEvent $event)
{
if (isset($event['type']) && $event['type'] === 'foo') {
// ... do something 进行一些操作
}
$event['counter']++;
}
} |
过滤数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | use Symfony\Component\EventDispatcher\GenericEvent;
$event = new GenericEvent($subject, array('data' => 'Foo'));
$dispatcher->dispatch('foo', $event);
var_dump($event['data']);
class FooListener
{
public function filter(GenericEvent $event)
{
$event['data'] = strtolower($event['data']);
}
} |
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。