Php zf2:从SharedEventManager到控制器的参数

Php zf2:从SharedEventManager到控制器的参数,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我正在尝试向我的zf2应用程序添加头身份验证,将侦听器绑定到分派事件 我的侦听器在分派时正确执行,并返回错误并停止响应的传播 问题是,当一切正常时,我想在请求中设置CurrentUsers参数,以便从控制器获取它 这是我现在的代码: Module.php public function onBootstrap(MvcEvent $event) { $app = $event->getApplication(); $sm = $app->getS

我正在尝试向我的zf2应用程序添加头身份验证,将侦听器绑定到分派事件

我的侦听器在分派时正确执行,并返回错误并停止响应的传播

问题是,当一切正常时,我想在请求中设置CurrentUsers参数,以便从控制器获取它

这是我现在的代码:

Module.php

public function onBootstrap(MvcEvent $event)
    {
        $app = $event->getApplication();
        $sm = $app->getServiceManager();
        $em = $app->getEventManager();

        $listener = $sm->get('MyAuthListener');
        $em->getSharedManager()->attach(
            'eventIdentifierForMyAbstractController',
            MvcEvent::EVENT_DISPATCH,
            $listener
        );
    }`
这个听众应该做这项工作

public function __invoke(MvcEvent $event)
{

    $result = $this->adapter->authenticate();

    if (!$result->isValid()) {
            //Invalidation process
    }
    /validation Process
    $event->setParam('user', $result->getIdentity()); 
}
在我这方面,几乎一切都正常
$result->getIdentity()
正在为我提供正确的标识<代码>$event->setParam('user',$result->getIdentity())在侦听器中正确设置事件的标识

但是,在我的控制器中,当我执行以下操作时:
$this->getEvent()->getParam('user')
参数为空(即=
{}
),但如果i
var\u dump($result->getIdentity())
,则对象将完全创建

我可以传递一个参数
$this->getEvent()->getParam('hello','hello')
,这样就可以了

我不明白为什么。文档中说它需要一个混合类型,所以应该可以


如果您需要更多信息,请随时询问。

您必须给您的侦听器更高的优先级,使其在发送控制器操作的侦听器之前执行。例如100

$em->getSharedManager()->attach(
    'eventIdentifierForMyAbstractController',
    MvcEvent::EVENT_DISPATCH,
    $listener,
    100
);

谢谢,它成功了。我还需要正确地提取
$user
,因为它不能在JsonModel中正确地呈现。使用自定义水合器构建我的身份解决方案。