我需要在symfony中为API返回疯狂的http代码状态
我需要返回状态码24我尝试使用:
$this->getResponse()->setStatusCode('24');
但我总是得到响应代码500
当我尝试返回“正常”状态代码,如404,403:
$this->getResponse()->setStatusCode('403');
没有问题
任何想法为什么?
答案 0 :(得分:6)
024是无效 HTTP代码(这与“未定义”不同)。有效的HTTP代码范围为100-599。
答案 1 :(得分:1)
我找到了一个解决方案,它必须有3个数字
$this->getResponse()->setStatusCode('024');
类似于标题函数
header('HTTP/1.0 024');
答案 2 :(得分:1)
我看到这个问题标有symfony1,但我的答案是在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)