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 19/02/2011, 11h29   #1
Futur Membre du Club
 
Inscription : février 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 42
Points : 16
Points : 16
Par défaut Affichage message erreur 404

Bonjour,

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

J'explique :
Code :
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 :
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.
nikolaus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 11h41   #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
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 12h07   #3
Futur Membre du Club
 
Inscription : février 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 42
Points : 16
Points : 16
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 :
1
2
 
$this->forward404Unless($foo->bar(), 'Mon message perso');
dans le template.


Dans le template, je fais ça :
Code :
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 :
1
2
3
4
5
 
public function executeError404(sfWebRequest $request)
{
    $this->message = ???
}
Peut-être avec $request-> ????

J'espère que je suis clair...
nikolaus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 12h24   #4
Futur Membre du Club
 
Inscription : février 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 42
Points : 16
Points : 16
Je crois que j'ai une solution, en tous cas ça marche.

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

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

Vos avis m'intéressent !
nikolaus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 13h57   #5
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 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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 19h23   #6
Futur Membre du Club
 
Inscription : février 2009
Messages : 42
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 42
Points : 16
Points : 16
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é !
nikolaus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2011, 19h40   #7
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
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 !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h23.


 
 
 
 
Partenaires

Hébergement Web