Return symfony 中的任意 http 代码
Return abitrary http code in symfony
使用 symfony 标准版 2.6 和 FOSRestBundle,我在我的控制器中抛出 HttpException:
throw new HttpException(525, "An error occured", $e);
在浏览器中,显示为错误 500。
例如使用509时,显示为509。
怎么了?
看来是 symfony 的 bug。
在HttpKernel->handleException()
方法中,只设置了状态码:
if ($e instanceof HttpExceptionInterface) {
// keep the HTTP status code and headers
$response->setStatusCode($e->getStatusCode());
然后它尝试从静态数组 Response::$statusText
中检测 statusText
但您的代码 (530) 未定义,因此它设置了一个空文本:
if (null === $text) {
$this->statusText = isset(self::$statusTexts[$code]) ? self::$statusTexts[$code] : '';
return $this;
}
if (false === $text) {
$this->statusText = '';
return $this;
}
我不确定根据 from the RFC statusText (== reapon-phrase) 是强制性的:它似乎可以是 space,所以 HTTP/1.1 525
(有两个space)应该是有效的。
我认为 apache(或 apache php 绑定)在未提供状态文本时正在修改状态代码。
使用 symfony 标准版 2.6 和 FOSRestBundle,我在我的控制器中抛出 HttpException:
throw new HttpException(525, "An error occured", $e);
在浏览器中,显示为错误 500。
例如使用509时,显示为509。
怎么了?
看来是 symfony 的 bug。
在HttpKernel->handleException()
方法中,只设置了状态码:
if ($e instanceof HttpExceptionInterface) {
// keep the HTTP status code and headers
$response->setStatusCode($e->getStatusCode());
然后它尝试从静态数组 Response::$statusText
中检测 statusText
但您的代码 (530) 未定义,因此它设置了一个空文本:
if (null === $text) {
$this->statusText = isset(self::$statusTexts[$code]) ? self::$statusTexts[$code] : '';
return $this;
}
if (false === $text) {
$this->statusText = '';
return $this;
}
我不确定根据 from the RFC statusText (== reapon-phrase) 是强制性的:它似乎可以是 space,所以 HTTP/1.1 525
(有两个space)应该是有效的。
我认为 apache(或 apache php 绑定)在未提供状态文本时正在修改状态代码。