在symfony中返回abitrary http代码

时间:2015-05-28 14:26:45

标签: symfony apache2 fosrestbundle

使用symfony标准版2.6和FOSRestBundle,我在控制器中抛出HttpException:

throw new HttpException(525, "An error occured", $e);

在浏览器中,它显示为错误500.

例如,当使用509时,它显示为509。

怎么了?

1 个答案:

答案 0 :(得分:0)

它似乎是symfony的一个错误。

HttpKernel->handleException()方法中,只设置了状态代码:

if ($e instanceof HttpExceptionInterface) {
  // keep the HTTP status code and headers
  $response->setStatusCode($e->getStatusCode());

然后它尝试从静态数组statusText中检测Response::$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)是强制性的:它似乎可以是一个空格,所以HTTP/1.1 525(有两个空格) )应该有效。

我认为当没有提供状态文本时,apache(或apache php绑定)正在修改状态代码。