2010-12-09 33 views
7

je dois retourner les statuts fous de code http pour l'API dans symfonyComment retourner le code d'état spécifique (par exemple 24) dans symfony

je dois retourner le code d'état 24 i essayer de le faire avec:

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

mais je suis toujours obtenir le code de réponse 500

lorsque je tente de retourner le code d'état "normal" comme 404, 403:

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

il n'a pas de problème

idées pourquoi?

Répondre

0

Je dirais qu'il n'y a pas official status code de 24.

Symfony interne peut vérifier.

Pour contourner, vous pouvez faire ...

header('HTTP/1.0 24'); 
1

i trouvé une solution, il doit avoir 3 chiffres

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

De même, en fonction d'en-tête

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

Ne fais pas ça, ce n'est pas un valeur valide pour un code HTTP. –

7

024 est un invalide code HTTP (ceci est différent de "undefined"). Les codes HTTP valides sont compris entre 100 et 599.

1

Je vois cette question est étiquetée avec , mais ma réponse a été testé sur Symfony 2.8. Une solution similaire est probablement possible avec Symfony 1.X.


Lors de la configuration de code d'état d'une réponse avec $response->setStatusCode(), Symfony préformes un check to confirm que le code d'état fourni est valide selon RFC 2616 - en particulier, qu'elle est comprise entre 100 - 600:

public function isInvalid() 
{ 
    return $this->statusCode < 100 || $this->statusCode >= 600; 
} 

Comme autre les réponses ont dit, 24 est hors de cette plage et un exception will be thrown as a result. En utilisant ce code d'état vous n'êtes pas conforme aux normes de HTTP et tout client normal peut ne pas fonctionner comme prévu. Cela dit, Je ne suis pas ici pour juger de votre expérience et une solution est disponible.

Vous pouvez créer une sous-classe de Response où vous remplacez isInvalid() pour toujours renvoyer false, ce qui permet de définir tous les codes d'état.

<?php 

namespace AppBundle; 

use Symfony\Component\HttpFoundation\Response; 

class NewResponse extends Response 
{ 
    public function isInvalid() 
    { 
     //Accept anything. 
     return false; 
    } 
} 

Utilisez cette classe au lieu de saisir une norme Response:

/** 
* @Route("/", name="homepage") 
*/ 
public function indexAction(Request $request) 
{ 
    $response = new NewResponse(); 
    $response->setStatusCode(24); 

    return $response; 
} 

résultats à obtenir le code de statut que vous êtes après:

$ 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

Merci pour la bonne idée! Si simple... –