IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[sf 1.4.x] Redirection ne renvoyant pas le bon code http


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Points : 42
    Points
    42
    Par défaut [sf 1.4.x] Redirection ne renvoyant pas le bon code http
    Salut,
    Cette fois-ci j'ai un problème avec la méthode redirect() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public function executeError404(sfWebRequest $request)
      {	
        $this->getUser()->setFlash('error404', sprintf('La page que vous avez demandez (%s) n\'existe pas ou plus.', $request->getParameter('slug')));
    	$this->redirect('@homepage',404);
      }
    Quand je regarde le filtre réseau de firebug, celui-ci me dit que la page qui contient l'erreur (avant d'être redirigée) renvoie un "302 found" qui est le code par défaut de la méthode redirect() au lieu d'un 404.
    Quelqu'un saurait où se trouve le problème ?

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Quant je lis ton code, je ne comprend pas trop bien.

    Tu définis un flash, ça je comprend.

    C'est la redirection vers la homepage qui ne me semble pas correcte. Soit tu mets le module et l'action "redirect('home','error404')" et tu traites dans l'action 'error404' du module 'home', soit tu utilises un lien nommé '@homepage' et un argument (prévu ou nom dans la route).

    Je suppose que tu veux juste afficher une <div> sur ta homepage avec le message 404 à l'intérieur, si tu tests dans le template la présence du flash (hasFlash) et que tu y mets le code, ce ne serait pas suffisant ?
    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 !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    Pour éclaircir mon code, j'ai ceci dans mon settings.yml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .actions:
        error_404_module:       page
        error_404_action:       error404
    La méthode executeError404 contient le code appelé pendant une erreur 404.

    Citation Envoyé par mimi68 Voir le message
    Je suppose que tu veux juste afficher une <div> sur ta homepage avec le message 404 à l'intérieur, si tu tests dans le template la présence du flash (hasFlash) et que tu y mets le code, ce ne serait pas suffisant ?
    C'est exactement se que je fais, et cette partie fonctionne bien.
    La doc de redirect() [redirect ($url, $statusCode)] dit qu'on peut utiliser la même syntaxe que pour la fonction url_for (utilisée dans la view).
    Mais le code renvoyé (302 au lieu du 404 demandé) me rend perplexe, est-ce que les moteurs de recherche et autres indexeurs ne vont pas comprendre de travers ?

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    De ce que je viens de parcourir sur le forum symfony en anglais me permet de compiler que :

    1) La documentation n'est vraiment pas simple a trouver, sur redirect() la documentation donne ceci :
    redirect (, , ) Browse code

    Redirects the request to another URL.
    Ce qui est plutôt light, plus loin dans le code on trouve pour les augments et dans l'ordre :
    • string URL - Ca c'est claire
    • int delay in second - faut lire l'explication dans le code, 0 devrait bien marcher
    • int error code - Le code d'erreur

    Pas simple de trouver l'explication, et encore, on a la chance de ne pas tomber sur un tableau dont les arguments sont traités par une autres fonction qui va déléguer partiellement son traitement ...


    2) Que pour rediriger sur une erreur 404 il y a un foward404() qui est plus appropriée.


    3) Sauf que pour toi, tu risques dans ces deux cas de tourner en rond, ton erreur 404 appel ta fonction de traitement, qui vas retourner une erreur 404, qui va appeler ta fonction de traitement d'erreur 404, qui vas ...

    On n'est pas couché.



    Je te propose en solution deux pistes :
    • le foward() vers la page home, et non pas un redirect(), ce qui ne devrait pas modifier le code erreur de la page (a tester).
    • Dans le code du contrôleur de la fonction qui affiche la homepage faire un truc du genre

    [CODE]
    if $this->hasFlash('error_404') {
    $this->getResponse()->setStatusCode(404);
    }
    (a tester)
    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 !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    On doit pas regarder au même endroit pour la doc, moi j'ai ca :
    http://www.symfony-project.org/api/1...ethod_redirect
    qui est assez clair.

    J'ai essayé d'utiliser setStatusCode(404), sans grand succès.
    Et après quelques tests, redirect renvoie le bon code uniquement quand ce code fait partie des 3xx. J'avoue ne pas comprendre d'où cela peut venir :/

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Autant pour moi, fin de journée, c'est la déclaration pour redirect en version 1.0 du framework... la fonction a donc évoluée, quoique.

    En interne cette fonction fait appel à la fonction redirect de l'objet sfWebController qui, elle, prend encore les trois arguments. En définitive, le code crée un objet sfWebReponse qui renvoie sur l'url avec le code, sans modification du code par le code (!).

    As-tu essayés la redirection interne par un foward entre ton module de traitement des erreurs 404 et ta home page ?

    Je suis surpris que le setStatusCode ne fonctionne pas, en effet, c'est ainsi qu'en interne le code de sfWebReponse utilise cette fonction pour renseigner son propre status code. Peut-être est-il redéfini par le moteur après que tu l'aie défini toi même.
    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 !

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 58
    Points : 42
    Points
    42
    Par défaut
    J'vais chercher dans le code pour voir s'il change pas en cours de route.
    Sinon ca vient peut-être de firebug, jvais chercher aussi dans cette direction.

Discussions similaires

  1. [AC-2003] Recordset ne renvoyant pas le bon nombre d'enregistrement
    Par Dermochelys dans le forum VBA Access
    Réponses: 1
    Dernier message: 19/03/2010, 15h33
  2. redirection qui marche pas
    Par michka999 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 13/07/2006, 16h45
  3. [CSV] Redirection ne fonctionne pas
    Par Brizzio dans le forum Langage
    Réponses: 12
    Dernier message: 16/12/2005, 10h55
  4. [DOS] Redirection ne fonctionne pas
    Par Pedro dans le forum Langage
    Réponses: 15
    Dernier message: 13/06/2005, 08h45
  5. Redirection 404 marche pas en local
    Par le mage tophinus dans le forum Apache
    Réponses: 8
    Dernier message: 10/06/2005, 08h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo