0

我以这种方式从 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。

4

1 回答 1

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->setError(static::ERROR)

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

于 2014-01-04T09:48:01.320 回答