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 :

Affichage message erreur 404


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut Affichage message erreur 404
    Bonjour,

    Comment afficher le message d'une erreur 404 personnalisée ?

    J'explique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->forward404Unless($foo->bar(), 'Mon message perso');
    me renvoie bien une erreur 404 si $foo->bar() renvoie false.

    Dans un environnement de dev le message s'affiche bien, mais pas dans un environnement de prod.

    L'erreur 404 est personnalisée pour le prod :
    l'action est vide et le template error404Success.php contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <h1>My 404</h1>
    <?php echo $message ?>
    Comment afficher le message d'une erreur 404 personnalisée en environnement de production ?

    merci.

  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
    Les messages d'erreurs sont définit dans un modules standard appelé "default" et qui est inclus dans symfony.

    Tu peux les redéfinir de deux manières, soit tu créer un modules "default" dans ton application et lui donne toutes les actions de celui de symfony (aussi non des erreurs 500 génèreraient des erreurs 404 et plus personne ne s'y retrouveraient !).

    Tu peux aussi définir ton propre module avec l'action ou les actions par défaut que tu souhaites traiter et changer leur attributions dans le fichier de configuration "setting.yml".

    Plus d'informations ici.
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    merci pour ta réponse.

    Citation Envoyé par Michel Rotta Voir le message
    Tu peux aussi définir ton propre module avec l'action ou les actions par défaut que tu souhaites traiter et changer leur attributions dans le fichier de configuration "setting.yml".
    C'est ce que j'ai fait. Mais comment afficher le message en deuxième paramètre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->forward404Unless($foo->bar(), 'Mon message perso');
    dans le template.


    Dans le template, je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <h1>My 404</h1>
    <?php echo $message ?>
    Le titre h1 apparait bien, donc ça marche, mais pas le contenu de $message.

    Je pense qu'il faut dans l'action pouvoir affecter le message à $this->message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function executeError404(sfWebRequest $request)
    {
        $this->message = ???
    }
    Peut-être avec $request-> ????

    J'espère que je suis clair...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Je crois que j'ai une solution, en tous cas ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $this->getUser()->setAttribute('message404','Message perso');
    $this->forward404Unless($foo->bar());
    le contenu de mon action 404 perso :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function executeError404(sfWebRequest $request)
    {
        $this->message = $this->getUser()->getAttribute('message404');
    }
    celui du template, inchangé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <h1>My 404</h1>
    <?php echo $message ?>

    Je trouve toujours bizarre de devoir faire ça....

    Vos avis m'intéressent !

  5. #5
    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
    En général je n'affiche pas le message d'erreur. C'est des indications pour les "pirate" de site.

    Dans le sfWebRequest tu as, dans mes souvenirs deux variables statusCode et statusText qui retourne le code d'erreur réel et le message. Ceci me semble plus "propre" que de le rechercher dans l'objet user. Surtout que je ne vois pas trop comment il peut bien y arriver.
    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 !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 42
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    En général je n'affiche pas le message d'erreur. C'est des indications pour les "pirate" de site.
    C'est juste un message du type 'Oups, il semble que vous soyez déjà connecté !'

    Citation Envoyé par Michel Rotta Voir le message
    Dans le sfWebRequest tu as, dans mes souvenirs deux variables statusCode et statusText qui retourne le code d'erreur réel et le message.
    J'ai bien réussi à afficher le code (404) avec ->getStatusCode(), mais pas le StatusText()... rien à faire.

    Je crois que je vais laisser tomber, il vaut peut-être mieux dans le cas présent rediriger vers un template unique et spécifique.

    Merci pour ta réactivité !

  7. #7
    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
    Perso, tout messages qui indique une erreur précise est l'indication pour un pirate qu'il est presque arrivé. Mais je suis certainement paranoïaque.

    Dans les sfResponse tu devrais plutôt les trouver comme des paramètres de la requête (interne) avec un getParameter('statusTexte'). Ils sont dans l'objet réponses, je n'ai pas regardé plus loin.
    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 !

Discussions similaires

  1. Affichage message d'erreur avec struts 2 et freemarker
    Par Cincinnatus dans le forum Struts 2
    Réponses: 6
    Dernier message: 15/05/2009, 09h29
  2. Affichage message d'erreur sur cellule protégé
    Par djm69 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/01/2008, 12h08
  3. Affichage message d'erreur sur la page courante
    Par mflorisson dans le forum Struts 2
    Réponses: 1
    Dernier message: 18/12/2007, 03h24
  4. [Erreur 404]Probleme affichage de la page d'accueil
    Par grelon dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 15/05/2007, 15h44
  5. JSP Affichage Messages erreurs
    Par maxime17s dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 14/05/2007, 15h08

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