2016-02-15 170 views
1

我正在学习Symfony,但我不明白调度自定义事件在Symfony中创建和发送事件

当我不得不派遣事件吗?在控制器内?

我不得不重复这个代码

// the order is somehow created or retrieved 
$order = new Order(); 
// ... 

// create the FilterOrderEvent and dispatch it 
$event = new FilterOrderEvent($order); 
$dispatcher->dispatch(StoreEvents::STORE_ORDER, $event); 

每当我想要一个事件?

In this Example发送此事件的优势是什么?

回答

2

您可以随时调度事件 - 在控制器中,在dataProvider中或在您有权访问EventDispatcher的任何其他地方。

正如symfony DOC声明:

在此事件的Symfony组件实现了Mediator模式 在一个简单而有效的方法,使所有这些东西可能和 使项目真正可扩展。

使用events的好处在于,您的控制器类(或您从其他任何派遣事件)与真实事件处理完全分离。你可以把它想成“火和忘记”,这意味着你只是发送一个事件 - 谁来做这件事并不是你的事。

在您的示例中,您只需添加订单和派送事件。当有人为你的系统编写插件时,他/她只会为该事件添加监听器,并以他/她的方式处理它 - 例如,发送添加了订单的电子邮件或重新索引搜索引擎。请注意,您可以将多个事件侦听器添加到同一个事件中。

查看更多about Mediator pattern

+0

感谢您的回复。我知道调解员模式。那么我的自定义事件是中介?在我的活动中,我可以有一个服务或代码来发送电子邮件? – monkeyUser

+0

不,“EventListener”是一个中介 - 而不是“Event”。发送电子邮件的代码应该在'EventListener'中。 http://symfony.com/doc/current/cookbook/event_dispatcher/event_listener.html#creating-an-event-listener –

+0

对,并在我的事件我有事件监听器的方法? – monkeyUser