返回(例如24)的特定狀態的代碼,我需要回到瘋狂的HTTP代碼狀態的API symfony的如何在symfony中
我需要返回狀態碼24我試圖做到這一點的:
$this->getResponse()->setStatusCode('24');
,但我一直都想與響應碼500
當我試圖恢復 「正常」 狀態碼404一樣,403:
$this->getResponse()->setStatusCode('403');
卻沒有這個問題
任何想法,爲什麼?
返回(例如24)的特定狀態的代碼,我需要回到瘋狂的HTTP代碼狀態的API symfony的如何在symfony中
我需要返回狀態碼24我試圖做到這一點的:
$this->getResponse()->setStatusCode('24');
,但我一直都想與響應碼500
當我試圖恢復 「正常」 狀態碼404一樣,403:
$this->getResponse()->setStatusCode('403');
卻沒有這個問題
任何想法,爲什麼?
我發現了一個解決方案,它必須有3位
$this->getResponse()->setStatusCode('024');
同樣在頭功能
header('HTTP/1.0 024');
024是一個無效HTTP代碼(這是從「未定義」不同)。有效的HTTP代碼範圍在100-599之間。
我看到這個問題被打上symfony1,但我的答案是對的Symfony 2.8測試。 Symfony 1.X可能有類似的解決方案。
當與$response->setStatusCode()
設置的響應的狀態碼,Symfony的預製件check to confirm所提供的狀態代碼是根據RFC 2616有效 - 即,它是在100 - 600:
public function isInvalid()
{
return $this->statusCode < 100 || $this->statusCode >= 600;
}
作爲其它答案已經表明,24是超出這個範圍和exception will be thrown as a result。通過使用此狀態代碼,您不符合HTTP標準,並且任何普通客戶端可能無法按預期運行。也就是說,我不是來評判你的實驗並且有一個解決方案。
您可以創建Response
的子類,覆蓋isInvalid()
始終返回false,從而允許設置任何和所有狀態碼。的
<?php
namespace AppBundle;
use Symfony\Component\HttpFoundation\Response;
class NewResponse extends Response
{
public function isInvalid()
{
//Accept anything.
return false;
}
}
使用這個類,而不是抓住一個標準Response
:在獲得的狀態代碼
/**
* @Route("/", name="homepage")
*/
public function indexAction(Request $request)
{
$response = new NewResponse();
$response->setStatusCode(24);
return $response;
}
結果你後:
$ curl -I 127.0.0.1:8000
HTTP/1.1 24 unknown status
Host: 127.0.0.1:8000
Connection: close
X-Powered-By: PHP/5.6.10
Cache-Control: no-cache
Content-Type: text/html; charset=UTF-8
X-Debug-Token: 189e2d
X-Debug-Token-Link: /_profiler/189e2d
Date: Fri, 29 Jan 2016 22:23:29 GMT
感謝您的好主意!很簡單... – 2017-03-06 12:22:39
不要做,這不是一個HTTP代碼的有效值。 – 2010-12-09 14:50:19