2013-03-05 110 views
3

我需要在每個模塊中實現事件觸發器,當發生特定事件時。我還需要所有其他模塊必須在事件觸發時做一些工作,並且要意識到這一點。ZF2共享模塊事件管理器

我正在嘗試創建一些可以發送觸發器的通用端點,以及所有模塊需要偵聽的位置,但是我在確定如何實現這一點時遇到了一些問題。

任何想法?

回答

14

基於對@ Andrew的回答的評論,只要您的控制器擴展了AbstractActionController(它最有可能),它已經可以識別EventManager,所以您可以繼續並在控制器操作中觸發任何您喜歡的事件通過做...

<?php 
namespace Application/Controller; 

// usual use statements omitted for brevity .. 

class IndexController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     // trigger MyEvent 
     $this->getEventManager()->trigger('MyEvent', $this); 
    } 

} 

要收聽其他模塊的引導該事件,請執行下列操作

public function onBootstrap(EventInterface $e) 
{ 
    $app = $e->getApplication(); 
    // get the shared events manager 
    $sem = $app->getEventManager()->getSharedManager(); 
    // listen to 'MyEvent' when triggered by the IndexController 
    $sem->attach('Application\Controller\IndexController', 'MyEvent', function($e) { 
     // do something... 
    }); 
} 
+1

,做到了。 :) – MGP 2013-03-06 10:52:03

3

有一個關於這幾個好文章:

http://www.mwop.net/blog/266-Using-the-ZF2-EventManager.html

http://www.eschrade.com/page/zend-framework-2-event-manager/

這很容易使你的模塊聽這是應用廣泛的一個事件,然後執行一些任務時觸發。在這兩個應該有足夠的信息讓你開始。

如果你舉一個你想要的東西的例子,我可以幫助一個你如何去做的例子。

+0

的IDEIA,概括地說,在我的IndexController中觸發一個事件我的ModuleA,在另一個ModuleB中,讓我們說我的Module.php onBoot在服務中佩帶ou,我想附上一個功能,並聽取該事件,當他被觸發時,做一些工作。 – MGP 2013-03-05 18:50:53

+0

你想什麼時候觸發事件? – Andrew 2013-03-06 08:37:32