Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 14h28   #1
Futur Membre du Club
 
Inscription : juin 2004
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 53
Points : 18
Points : 18
Par défaut status code HTTP personnalisé sur erreur

Hello

Je développe une API REST sur mon site
Je voudrais que quand une erreur survient, ma méthode ne renvoie rien, seulement un code HTTP d'erreur personnalisé (par ex HTTP 601..)

Je n'ai aucune idée de comment faire cela dans mon action
Voila l'action en question :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
class rewardActions extends sfActions
{
  public function executeList(sfWebRequest $request) {
    $this->rewards = array();
    $i=0;
 
    $rewards = Doctrine_Core::getTable('Reward')->findAll();
 
 
    foreach ($rewards as $reward) { 
      $this->rewards[$i++] = $reward->asArray($request->getHost().$request->getScriptName());      
    }
    $this->getResponse()->setHttpHeader('Content-type', 'application/json');
    $this->getResponse()->setContent(json_encode($this->rewards));
    return sfView::NONE;
  } 
}
Dans ce cas, je veux que si $reward->asArray() envoie une exception, le code HTTP renvoyé soit 601 et non "200" comme actuellement (car réponse à la requete "GET")
Comment faire pour cela ??

Merci d'avance!
gavelin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 15h21   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Il n'y a pas un setStatusCode() ou un setCodeStatus() dans les méthodes de l'objet sfWebResponse ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 17h47   #3
Futur Membre du Club
 
Inscription : juin 2004
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 53
Points : 18
Points : 18
et bien l'objet "response" est de type sfResponse et pas sfWebResponse non ?
sur l'objet sfResponse je n'ai pas de "setStatusCode".
gavelin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 01h10   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
La méthode fait partie de sfWebReponse.

Mais je ne sais pas très bien où se situe la limite entre les deux.

Je pense n'avoir jamais utilisé que le sfWebRéponse...

REST est un protocole qui utilise le HTTP pour le transport, donc il me semblerait logique de baser la réponse sur le sfWebReponse, non ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 14h04   #5
Futur Membre du Club
 
Inscription : juin 2004
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 53
Points : 18
Points : 18
Oui effectivement :
La fonction a utiliser est :
$this->getResponse()->setStatusCode(XXX,'custom message');

il faut bien faire attention au sfWebResponse, c'est le premier point :

- Dans le "factories.yml"
Code :
1
2
3
4
5
6
7
8
9
dev:
  mailer:
    param:
      delivery_strategy: none
 
  response:
    class: sfWebResponse
    param:
      send_http_headers: true
-Et aussi, DESACTIVER LA DEBUG BAR dans le "settings.yml" de l'application !! (car sans ça, vous allez toujours avoir des codes 200, même avec le setStatusCode() ).

gavelin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 14h12   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Ton service n'est pas sensé appeler l'application en mode debug. Et en mode normal, la debug barre devrait être désactivée...
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 14h33   #7
Futur Membre du Club
 
Inscription : juin 2004
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 53
Points : 18
Points : 18
Effectivement, sauf que sur mon appli, je suis en contexte "dev" et donc avec la barre par défaut ! donc en testant l'API sur le contexte "dev" avec la barre donc, cela ne fonctionnait pas
gavelin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 14h45   #8
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
En contexte "dev" dans l'appli ?

Bon, chacun fait comme il veut, mais je ne pense pas que cela soit courrant.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 15h05   #9
Futur Membre du Club
 
Inscription : juin 2004
Messages : 53
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 53
Points : 18
Points : 18
looool en général vaut mieux commencer par le contexte "dev" avant de passer en contexte "test" et ensuite en "prod" non ?
gavelin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 16h28   #10
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je pense que l'on parle de choses différentes.

Je parle de lancer l'application avec le contrôleur de dev : frontend_dev.php.

De ce que j'ai compris, tu préfères basculer le mode dev sur toute l'application.

L'avantage avec le mode dev dans le contrôleur c'est que si tu fais un appel REST sur l'url 'standart' de l'application, elle n'est pas en dev, ce qui est plus simple (a mon avis) pour tester un REST. Tu peux toujours lancer la demande depuis un explorateur en mode dev à l'aide du contrôleur, l'explorateur peut afficher le contenu généré.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h33.


 
 
 
 
Partenaires

Hébergement Web