我遇到了触发事件的问题.这是我的代码......
Controller.php这样
function get($id)
{
$this->getEventManager()->trigger('hmac.check');
}
Run Code Online (Sandbox Code Playgroud)
运行此触发器时,即使附加了hmac.check事件,也不会运行该事件.
module.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);
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在$ mm-> getEventManager-> attach()之前或之后回显消息; 它显示测试正常,所以我知道它正在执行init方法.
任何帮助都会很棒.
提前致谢
编辑:这是一个宁静的控制器,如果这有任何区别(我不认为它).
问题是您将侦听器附加到ModuleManagers EventManager实例,而不是主ApplicationEventManager.
无法直接从模块init()连接到Application EventManager,模块管理器无法访问它,因此您需要从ModuleManager的EventManager获取SharedManager并将事件监听器附加到该事件监听器.
这是通过hmac.check在任何扩展的控制器触发时监听事件来执行此操作的示例Zend\Mvc\Controller\AbstractRestfulController,但您可以通过将其替换为控制器FQCN来侦听特定控制器.
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);
}
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2761 次 |
| 最近记录: |