Php 始终返回状态代码200

Php 始终返回状态代码200,php,json,zend-framework2,bootstrapping,http-status-code-200,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);

我以这种方式返回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

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

之前:
您需要中断处理请求的正常过程。请参阅模块BjyAuthorize。它生成一个错误:在这里它被处理:


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

之后:
这不是最好的问题,也不是最好的答案。最好的答案是“使用标准模块”。然而,有一件事被称为“系统的终极复杂性”。系统已经达到复杂性极限的一个标志是,用户发现编写自己的代码而不使用标准更容易。然而,存在客观和主观复杂性。目标-标准模块不是很复杂。然而,它们并没有以最好的方式记录下来。因此,我相信我的回答旨在降低主观标准系统的复杂性,在本例中,模块BJYAAuthorize。您可以按如下方式指定自己的策略:“unauthorized_strategy”=>“MyModule\Listener\UnauthorizedStrategy”

您需要中断处理请求的正常过程。请参阅模块BjyAuthorize。它生成一个错误:在这里它被处理:我必须在代码块中放置此代码的位置?在onBootstrap方法中,您可以为事件MvcEvent::event\u DISPATCH\u error添加一个侦听器。它将检查错误是否为身份验证错误,以及是否需要设置响应的状态代码及其内容。Auth代码将触发一个事件MvcEvent::event\u DISPATCH\u ERROR并设置“event ERROR”$event->setError(static::ERROR)。这与状态代码无关,但我认为使用onBootstrap方法直接在Module.php中返回json响应不是一个好主意。为什么不在控制器级别使用JsonModel?