Zend framework2 使用Dispatch事件检查授权
我正在尝试设置一个简单的API。我有一个控制器,所有其他API控制器都在扩展,我还附加了一个调度侦听器,就像这样。我创建了一个总是失败的测试。将状态代码设置为401,然后返回消息。但是,它仍然在调用主控制器方法,并且没有放弃来自preDispatch方法的请求。我可以在这里建立一个正确的响应并强制ZF2不继续执行请求的路由吗?我试图添加一个Zend framework2 使用Dispatch事件检查授权,zend-framework2,Zend Framework2,我正在尝试设置一个简单的API。我有一个控制器,所有其他API控制器都在扩展,我还附加了一个调度侦听器,就像这样。我创建了一个总是失败的测试。将状态代码设置为401,然后返回消息。但是,它仍然在调用主控制器方法,并且没有放弃来自preDispatch方法的请求。我可以在这里建立一个正确的响应并强制ZF2不继续执行请求的路由吗?我试图添加一个exit()语句,但客户端收到的响应不完整 protected function attachDefaultListeners() {
exit()
语句,但客户端收到的响应不完整
protected function attachDefaultListeners()
{
parent::attachDefaultListeners();
$events = $this->getEventManager();
$this->events->attach('dispatch', array($this, 'preDispatch'), 100);
$this->events->attach('dispatch', array($this, 'postDispatch'), -100);
}
public function preDispatch (MvcEvent $e)
{
$this->dm = $this->getServiceLocator()->get('doctrine.documentmanager.odm_default');
// TODO: Check user and token from DB
if (Cookie::isCookieSet())
{
$cookie = Cookie::readCookie();
if (empty($cookie->user))
{
$this->getResponse()->setStatusCode(401);
return new JsonModel(array('auth' => false, 'msg' => 'Try again'));
}
// Cookie not set, if we are authenticating, continue; otherwise return a failure
} else {
}
}
您需要返回一个响应对象来缩短流程,而不是ViewModel: 试着这样做:
$response = $this->getResponse();
$response->setStatusCode(401);
$response->setContent(array('auth' => false, 'msg' => 'Try again'));
return $response;