0
使用symfony的標準版2.6和FOSRestBundle,我在我的控制器拋出HttpException:返回abitrary HTTP代碼symfony的
throw new HttpException(525, "An error occured", $e);
在瀏覽器中,它顯示爲錯誤500
當以509爲例,顯示爲509.
怎麼了?
使用symfony的標準版2.6和FOSRestBundle,我在我的控制器拋出HttpException:返回abitrary HTTP代碼symfony的
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的狀態文本(== reapon短語)是必需的:似乎是可以是一個空間,所以HTTP/1.1 525
(有兩個空間)應該是有效的。
我認爲,Apache(或Apache的PHP綁定)正在修改狀態代碼,當沒有狀態文本提供。
您可能可以從控制器添加更多的代碼,顯示錯誤來自哪裏? –
沒有錯誤:它可以很好地處理501,502,509等代碼,但不會與515,550轉換回「500」。 – numer0
這些代碼是什麼?我在這裏找不到它們http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 也許symfony不識別你的代碼並將它們轉換成500。 – Hakim