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