zf2:从SharedEventManager到控制器

时间:2016-07-13 09:08:25

标签: php zend-framework zend-framework2

我试图将头部身份验证添加到我的zf2应用程序,将侦听器绑定到调度事件。

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

问题在于,当一切正常时,我想在请求中设置当前用户参数,以便我可以从控制器获取它。

这是我现在的代码:

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') 参数为空(即= {}),但如果是var_dump($result->getIdentity()),则完全创建对象。

我可以传递一个参数$this->getEvent()->getParam('hello', 'hello'),这很好。

我无法弄清楚原因。文档说它期望混合类型,所以它应该没问题。

如果您需要更多信息,请随时提出。

1 个答案:

答案 0 :(得分:2)

您必须为侦听器提供更高的优先级,以使其在调度控制器操作的侦听器之前执行。例如100。

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