ZF2共享模块事件管理器

MGP*_*MGP 4 events zend-framework2

我需要在每个模块中实现特定事件发生时的事件触发器.我还需要在触发该事件时必须执行某些工作的所有其他模块,请注意它.

我正在尝试创建一些可以发送触发器的公共端点,以及所有模块需要监听的位置,但是我在弄清楚如何实现这一点时遇到了一些麻烦.

有任何想法吗?

Cri*_*isp 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

要在其他模块的引导程序中侦听该事件,请执行以下操作

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...
    });
}
Run Code Online (Sandbox Code Playgroud)