zend framework 2 - 响应错误消息的最佳方法

时间:2013-01-18 23:27:09

标签: jquery error-handling zend-framework2 httpresponse

我在控制器的Action方法中有这个代码:

    $session = new Container('user');
    $response = $this->getResponse();
    if (!$session->offsetExists('userId')) {
      return $response->setContent(-1);
    }
    else //Correct response code

在我的视图中,我使用jquery / javascript和ajax检测错误,并且效果很好。

    function anyfunction(drawId) {
      $.post('controller/action', '&param1=X', function(data) {
        if (data == -1) document.error.innetHTML = 'user no logued';
        else //correct response
      }
    }

我改变了我的方法,因为我喜欢从控制器发送消息。 我需要发送一些指标,以便视图知道响应是一个错误。 我曾考虑使用$ response-> setMetaData()方法,但我不知道它是否适用于此。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您必须使用正确的HTTP状态代码,并且正文可选地包含错误说明 在这种情况下,代码是 401 Unauthorized
实际上,401不适合,因为它需要WWW-Authenticate标头。那么应该使用403 Forbidden。

另外我建议您了解:

  1. JSON格式,javascript原生,zF2 MVC支持json视图策略。
  2. RESTful API。如果它不会被使用,它仍然会让你知道如何正确使用HTTP。您可能需要阅读此blog post and comments
  3. 看一下这个ietf草案:Problem Details for HTTP APIs这个草案目前不是标准的,但它可以给你一些想法。
  4. 更新

    我觉得我应该补充说明,因为答案是不完整的。 除了状态代码之外,您通常还需要生成具有额外细节的响应主体,可能符合上面提到的草案 由于Zf2非常灵活,因此没有固定的方法可以做某事。在其中一种可能的方法中,您需要MvcEvent::EVENT_DISPATCH上的监听器来检测未经身份验证/未经授权的访问并触发MvcEvent::EVENT_DISPATCH_ERROR事件。
    看看BjyAuthorize模块。你可以使用它。

    你需要MvcEvent::EVENT_DISPATCH_ERROR的听众准备适当的回应 You can use this as example至少应使用正确填充的JsonModel替换ViewModel。此外,您还需要注册json视图策略才能使其正常工作。