Events 在Symfony中创建和分派事件

Events 在Symfony中创建和分派事件,events,symfony,Events,Symfony,我正在学习Symfony,但我不了解分派自定义事件 我什么时候必须发送事件?控制器内部 我必须重复这个密码 // the order is somehow created or retrieved $order = new Order(); // ... // create the FilterOrderEvent and dispatch it $event = new FilterOrderEvent($order); $dispatcher->dispatch(StoreEvent

我正在学习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);
我什么时候想参加活动


分派此事件的优点是什么?

您可以随时分派事件—在controller、dataProvider或您有权访问
EventDispatcher
的任何其他位置

symfony
doc中所述:

Symfony EventDispatcher组件实现中介模式 以一种简单有效的方式使所有这些事情成为可能 使您的项目真正可扩展

使用
事件
的优点是,您的控制器类(或从中分派事件的任何其他类)与实际事件处理完全解耦。你可以把它想象成“开火然后忘记”的意思,意思是你只是发送一个事件——谁和将要做什么都不关你的事

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


阅读更多关于图案的信息

谢谢回复。我知道中介模式。那么我的自定义事件是中介?在我的活动中,我可以使用服务或代码发送电子邮件吗?不,
EventListener
是一个中介,而不是
Event
。发送电子邮件的代码应位于EventListener中。对,在我的事件中,我有一个事件监听器的方法?不,事件监听器应该有一个方法,它接受你的事件作为一个参数-现在我明白了,这都在dochank中