始终返回状态代码200

时间:2014-01-04 06:49:53

标签: php json zend-framework2 bootstrapping http-status-code-200

我以这种方式从onBootStrap()返回响应..

 $app = $e->getApplication();

           $em->attach(MvcEvent::EVENT_ROUTE, function($e) use ($app) {

              $response = $e->getResponse();
                $response->setStatusCode(403);

                $jsonValue = json_encode(array(
                   'error'   => 12345,
                   'message' => 'You are not authorized for this request',
                ));


                $response->setContent($jsonValue);

                return $response;

        }, PHP_INT_MAX);

但问题是,即使我传递了不同的状态代码,我也会获得状态代码200.

我正在从Advanced rest API客户端运行此API。

1 个答案:

答案 0 :(得分:1)

<强>之前:  您需要中断处理请求的正常过程。参见模块BjyAuthorize。它会生成错误:https://github.com/bjyoungblood/BjyAuthorize/blob/master/src/BjyAuthorize/Guard/Route.php#L69此处处理错误:https://github.com/bjyoungblood/BjyAuthorize/blob/master/src/BjyAuthorize/View/UnauthorizedStrategy.php#L53

在onBootstrap方法中,您可以为事件MvcEvent :: EVENT_DISPATCH_ERROR添加一个侦听器。它将检查错误是否为Auth错误,以及是否需要设置响应的状态代码及其内容。验证代码将触发事件MvcEvent :: EVENT_DISPATCH_ERROR并设置“事件错误”$ event-&gt; setError(static :: ERROR)

<强>后: 这不是最好的问题,不是最好的答案。最好的答案是“使用标准模块”。然而,存在“系统的最终复杂性”这样的事情。系统已达到复杂性极限的标志是用户发现编写自己的代码更容易,而不是使用标准。然而,存在客观和主观的复杂性。目标 - 标准模块不是很复杂。然而,它们没有以最佳方式记录。因此,我认为我的答案旨在降低主观标准系统的复杂性,在这种情况下 - 模块BjyAuthorize。您可以按如下方式指定自己的策略:'unauthorized_strategy'=&gt; 'MyModule的\监听\ UnauthorizedStrategy'