2016-02-15 81 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