2015-05-28 33 views
0

使用symfony的標準版2.6和FOSRestBundle,我在我的控制器拋出HttpException:返回abitrary HTTP代碼symfony的

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

在瀏覽器中,它顯示爲錯誤500

當以509爲例,顯示爲509.

怎麼了?

+0

您可能可以從控制器添加更多的代碼,顯示錯誤來自哪裏? –

+0

沒有錯誤:它可以很好地處理501,502,509等代碼,但不會與515,550轉換回「500」。 – numer0

+0

這些代碼是什麼?我在這裏找不到它們http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 也許symfony不識別你的代碼並將它們轉換成500。 – Hakim

回答

0

看來這是來自symfony的一個bug。

HttpKernel->handleException()方法中,僅在狀態代碼被設爲:

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

然後它會嘗試檢測來自靜態數組Response::$statusTextstatusText但是您的代碼(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的狀態文本(== reapon短語)是必需的:似乎是可以是一個空間,所以HTTP/1.1 525(有兩個空間)應該是有效的。

我認爲,Apache(或Apache的PHP綁定)正在修改狀態代碼,當沒有狀態文本提供。