events - ZF2 共享模块事件管理器

标签 events zend-framework2

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

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

有任何想法吗?

最佳答案

根据对@Andrew 回答的评论,只要您的 Controller 扩展 AbstractActionController (它很可能会这样做)它已经知道 EventManager,因此您只需执行以下操作即可继续并在 Controller 操作中触发您喜欢的任何事件...

<?php
namespace Application/Controller;

// usual use statements omitted for brevity ..

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

}

要在其他模块的 Bootstrap 中收听该事件,请执行以下操作
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...
    });
}

关于events - ZF2 共享模块事件管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15227693/

相关文章:

javascript - Jquery 在我的表单发布后消失 div?

zend-framework2 - ZF2 - BjyAuthorize - 如何从数据库中获取规则和保护

php - "a"将 Zend2 应用程序与 PHPBB3 身份验证集成的正确方法是什么?

php - 从 Zend Framework 1 迁移到 Zend Framework 2

php - 传递值以在 Zend Framework 2 中查看

java - 如何禁用 JList 选择更改事件并仅在双击时调用它?

Laravel 事件超出 Pusher 允许的限制

c++ - 如何获取进程状态(正在运行、已终止)事件?

javascript - "this"在 swiper 事件中是 Window,而不是 swiper

zend-framework2 - orWhere在zf2中消失了。如何更换它?