Как вернуть определенный код состояния (например, 24) в Symfony - PullRequest
8 голосов
/ 09 декабря 2010

мне нужно вернуть сумасшедшие статусы http-кода для API в symfony

мне нужно вернуть код статуса 24 Я пытаюсь сделать это с помощью:

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

но я всегда получаюкод ответа 500

когда я пытаюсь вернуть "нормальный" код состояния, например 404, 403:

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

, у него нет проблем

есть идеи, почему?

Ответы [ 4 ]

6 голосов
/ 09 декабря 2010

024 - это недействительный HTTP-код (он отличается от "undefined").Допустимые коды HTTP находятся в диапазоне 100-599.

1 голос
/ 30 января 2016

Я вижу, что этот вопрос помечен , однако мой ответ был проверен на 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
1 голос
/ 09 декабря 2010

я нашел решение, оно должно иметь 3 цифры

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

аналогично в функции заголовка

header('HTTP/1.0 024');
0 голосов
/ 09 декабря 2010

Полагаю, что нет официального кода статуса из 24.

Symfony может внутренне это проверить.

Чтобы обойти это, вы могли бы сделать ...

header('HTTP/1.0 24');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...