我正在尝试设置一个简单的API。我有一个控制器所有其他API控制器正在扩展,我已经附加了一个这样的调度监听器。我创建了一个永远失败的测试。将状态代码设置为401,然后返回消息。但是,它仍然调用主控制器方法而不是放弃preDispatch方法的请求。我可以在这里建立一个正确的响应并强制ZF2不继续执行请求的路由吗?我尝试添加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 {
}
}
答案 0 :(得分:1)
您需要返回一个响应对象来使进程短路,而不是ViewModel:
尝试这样的事情:
$response = $this->getResponse();
$response->setStatusCode(401);
$response->setContent(array('auth' => false, 'msg' => 'Try again'));
return $response;