2010-12-09 35 views
7

返回(例如24)的特定狀態的代碼,我需要回到瘋狂的HTTP代碼狀態的API symfony的如何在symfony中

我需要返回狀態碼24我試圖做到這一點的:

$this->getResponse()->setStatusCode('24'); 

,但我一直都想與響應碼500

當我試圖恢復 「正常」 狀態碼404一樣,403:

$this->getResponse()->setStatusCode('403'); 

卻沒有這個問題

任何想法,爲什麼?

回答

0

我的猜測是沒有的24

沒有 official status code 的Symfony可以在內部檢查。

要解決它,你可以做...

header('HTTP/1.0 24'); 
1

我發現了一個解決方案,它必須有3位

$this->getResponse()->setStatusCode('024'); 

同樣在頭功能

header('HTTP/1.0 024'); 
+9

不要做,這不是一個HTTP代碼的有效值。 – 2010-12-09 14:50:19

7

024是一個無效HTTP代碼(這是從「未定義」不同)。有效的HTTP代碼範圍在100-599之間。

1

我看到這個問題被打上,但我的答案是對的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 
+0

感謝您的好主意!很簡單... – 2017-03-06 12:22:39