2013-03-05 85 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