gpt4 book ai didi

zend-framework2 - ZF2 事件触发器

转载 作者:行者123 更新时间:2023-12-04 11:26:17 24 4
gpt4 key购买 nike

我在触发事件时遇到问题。这是我的代码...

Controller .php

function get($id) 
{
$this->getEventManager()->trigger('hmac.check');
}

运行此触发器时,即使已附加,它也不会运行 hmac.check 事件。

模块.php
class Module
{
/**
* Init the methods
*
* @param ModuleManager $moduleManager
*/
public function init(ModuleManager $mm)
{
$mm->getEventManager()
->attach(
'hmac.check',
function(MvcEvent $evt)
{
echo "The trigger has worked";
$key = $evt->getParams()->fromHeader('key');
$ts = $evt->getParams()->fromHeader('when');
$uri = $evt->getParams()->fromHeader('uri');

$hmac = new \Scc\Hmac\Hmac(new HmacConfig, new HmacStorage);
}
);
}
}

如果我在 $mm->getEventManager->attach(); 之前或之后回显一条消息;它显示测试很好,所以我知道它正在执行 init 方法。

对此的任何帮助都会很棒。

提前致谢

编辑:
如果这有什么不同的话,这是一个安静的 Controller (我认为没有)。

最佳答案

问题是您将监听器附加到 ModuleManager小号 EventManager实例,而不是主要的 Application事件管理器。

没有办法直接从模块 init() 附加到 Application EventManager,模块管理器无权访问它,因此您需要从 ModuleManager 的 EventManager 获取 SharedManager 并将您的事件监听器附加到它。

这是一个通过收听 hmac.check 来做到这一点的示例。由任何扩展 Zend\Mvc\Controller\AbstractRestfulController 的 Controller 触发的事件,但您可以通过将其替换为 Controller FQCN 来收听特定 Controller 。

class Module
{
/**
* Init the methods
*
* @param ModuleManager $moduleManager
*/
public function init(ModuleManager $mm)
{
$mm->getEventManager()->getSharedManager()
->attach(
'Zend\Mvc\Controller\AbstractRestfulController', 'hmac.check',
function(MvcEvent $evt)
{
echo "The trigger has worked";
$key = $evt->getParams()->fromHeader('key');
$ts = $evt->getParams()->fromHeader('when');
$uri = $evt->getParams()->fromHeader('uri');

$hmac = new \Scc\Hmac\Hmac(new HmacConfig, new HmacStorage);
}
);
}
}

关于zend-framework2 - ZF2 事件触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com