如何在symfony中返回特定的状态代码(例如24)

时间:2010-12-09 13:42:39

标签: php http symfony1 http-headers

我需要在symfony中为API返回疯狂的http代码状态

我需要返回状态码24我尝试使用:

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

但我总是得到响应代码500

当我尝试返回“正常”状态代码,如404,403:

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

没有问题

任何想法为什么?

4 个答案:

答案 0 :(得分:6)

024是无效 HTTP代码(这与“未定义”不同)。有效的HTTP代码范围为100-599。

答案 1 :(得分:1)

我找到了一个解决方案,它必须有3个数字

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

类似于标题函数

header('HTTP/1.0 024');

答案 2 :(得分:1)

我看到这个问题标有,但我的答案是在Symfony 2.8上测试的。 Symfony 1.X可能有类似的解决方案。

使用$response->setStatusCode()设置响应的状态代码时,Symfony根据check to confirm预先生成RFC 2616所提供的状态代码有效 - 具体而言,它在100 - 600之间:< / p>

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

答案 3 :(得分:0)

我的猜测是没有 official status code  24。

Symfony可以在内部检查。

要绕过它,你可以做......

header('HTTP/1.0 24');