Я вижу, что этот вопрос помечен symfony1 , однако мой ответ был проверен на Symfony 2.8.Подобное решение, вероятно, возможно с Symfony 1.X.
При установке кода состояния ответа с помощью $response->setStatusCode()
, Symfony предварительно проверяет , чтобы подтвердить , что предоставленный код состояниядействителен в соответствии с RFC 2616 , в частности, между 100 и 600:
public function isInvalid()
{
return $this->statusCode < 100 || $this->statusCode >= 600;
}
Как указывалось в других ответах, 24 выходит за пределы этого диапазона, и исключение быть брошенным в результате .Используя этот код состояния, вы не соответствуете стандартам 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