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 绑定)在未提供状态文本时正在修改状态代码。