将事件注入服务

时间:2012-09-14 10:10:43

标签: symfony symfony-2.1

有没有办法在服务中注入事件,以使服务类型与事件无关? 散文:
服务说:嘿,给我任何事件,我会在完成工作后将其解雇并开火。

我认为这很困难,因为事件的结构可能非常不同:
Event1期望构造函数中的三个参数和Event2中的一个参数。

目的是减少捆绑中的依赖关系,同时为fe自定义记录器提供灵活性以挂钩服务。

我怎样才能达到这样的目标?

也许相反:触发服务事件并使侦听器事件不可知?

1 个答案:

答案 0 :(得分:1)

如果服务的调用者确实知道事件的参数,并且事件的监听器确实知道事件,则可以创建事件。

我的示例基于Symfony2烹饪书中的示例:How to extend a Class without using Inheritance

通常情况下你会发送一个这样的事件:

$event = new HandleUndefinedMethodEvent($this, $method, $arguments);
$this->dispatcher->dispatch('foo.method_is_not_found', $event);

在您的服务中,您可以添加一种方法来创建新事件:

public function createEvent($name, $class, $arguments)
{
    ...
    $eventClass = new \ReflectionClass($class);
    $event = $eventClass->newInstanceArgs($arguments);
    $this->dispatcher->dispatch($name, $event);
}

在这种情况下,服务不需要知道事件,但是,如上所述,调用者和听者都必须知道。

相关问题