0

我在控制器的 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() 方法,但我不知道它是否适用于此。

提前致谢。

4

1 回答 1

2

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

另外,我建议您了解:

  1. JSON 格式,原生 javascript 并由带有 json 视图策略的 ZF2 MVC 支持。
  2. RESTful API。如果不使用它,它仍然会让您了解如何正确使用 HTTP。您可能想阅读此博客文章和评论
  3. 看看这个 ietf 草案:HTTP API 的问题详细信息这个草案目前在任何方面都不是标准的,但它可以给你一些想法。

更新:

我觉得我应该添加说明,因为答案不完整。除了状态码之外,您通常还需要生成带有额外详细信息的响应正文,可能与上述草案一致。
由于 Zf2 非常灵活,因此没有固定的方法来做某事。在其中一种可能的方法中,您将需要监听MvcEvent::EVENT_DISPATCH器来检测未经身份验证/未经授权的访问并触发MvcEvent::EVENT_DISPATCH_ERROR事件。
看看 BjyAuthorize 模块。你可以使用它。

而且您将需要监听MvcEvent::EVENT_DISPATCH_ERROR器来准备正确的响应。
您可以将此用作示例至少应将 ViewModel 替换为正确填充的 JsonModel。您还需要注册 json 视图策略才能使其工作。

于 2013-01-19T06:39:16.953 回答