我试图将头部身份验证添加到我的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')
,这很好。
我无法弄清楚原因。文档说它期望混合类型,所以它应该没问题。
如果您需要更多信息,请随时提出。
答案 0 :(得分:2)
您必须为侦听器提供更高的优先级,以使其在调度控制器操作的侦听器之前执行。例如100。
$em->getSharedManager()->attach(
'eventIdentifierForMyAbstractController',
MvcEvent::EVENT_DISPATCH,
$listener,
100
);