我有一个配置了json策略的web服务模块。我正在创建登录功能,如果用户未登录则返回错误。
测试用户是否已登录在Module类
上有事件调度class Module {
public function onBootstrap(MvcEvent $e) {
(...)
$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'mvcPreDispatch'), 1000);
}
public function mvcPreDispatch(MvcEvent $e) {
$authService = $e->getApplication()->getServiceManager()->get('auth');
if($authService->isAuthenticated()) {
return true;
}
$model = new JsonModel(array(
'errors' => array(
'httpCode' => $e->getResponse()->getStatusCode(),
'title' => $e->getResponse()->getReasonPhrase(),
'message' => 'Login necessário'
)
));
return $model;
}
}
如何停止请求并在屏幕上显示错误消息?
答案 0 :(得分:0)
Afaik您需要通过返回Response
对象或在事件上调用stopPropagation(true)
来使事件短路。这将阻止所有其他调度侦听器执行并将响应返回给客户端。
您可以尝试这样的事情:
public function mvcPreDispatch(MvcEvent $e)
{
$authService = $e->getApplication()->getServiceManager()->get('auth');
if($authService->isAuthenticated()) {
return true;
}
$model = new JsonModel(array(
'errors' => array(
'httpCode' => $e->getResponse()->getStatusCode(),
'title' => $e->getResponse()->getReasonPhrase(),
'message' => 'Login necessário'
)
));
$e->setViewModel($model);
$e->stopPropagation(true);
}