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 10/12/2010, 10h48   #1
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Par défaut Meilleur méthode pour affichage libellé au lieu de l'id

Bonjour,

je ne suis pas parvenu à trouver une discussion sur ce sujet, même si je pense qu'il y en as car cela doit être assez banale, je n'ai pas trouvé les bon termes pour ma recherche ...

J'ai une table contenant des demandes qui ont chacune un statut.
J'ai donc une table demandes avec un champ id_statut et une table statuts avec des enregistrements id_statut / lib_statut.

A l'affichage de ma table des demandes, j'ai donc pour chaque ligne un id_statut. Et ce que j'aimerais savoir, c'est la meilleur façon de coder le fait que l'affichage soit non pas l'id_statut mais son libellé !

J'ai procédé de cette façon, qui marche parfaitement, mais dans un souci d'optimisation de mon code, j'aimerais connaitre la meilleur façon de faire :

Dans mon fichier indexSuccess.php qui affiche ma table demandes j'ai fait :
Code :
<td><?php echo D2iStatutsPeer::retrieveByPk($D2iDemandes->getIdStatut())->getTxtStatut() ?></td>
Merci d'avance pour l'info !

Bizoo
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 10h58   #2
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
Le plus simple est de renseigner une méthode 'magique' __toString() pour ton objet Statut :
Code :
public function __toString() { return $this->getLibelle(); }
Tu devrais alors voir apparaître le résultat du __toString() à la place des ids, sans même avoir à modifier les templates.
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 11h02   #3
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
J'ai des méthodes __toString pour tous mes objets !

Mais à l'affichage il est demander le $objet_demande->getIdStatut();

Donc ça me retourne la valeur du champ id_statut de la table demande et donc ça ne fait aucun lien avec l'objet statut...
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 11h35   #4
Membre chevronné
 
Avatar de Herode
 
Développeur Web
Inscription : mars 2005
Messages : 769
Détails du profil
Informations personnelles :
Localisation : France, Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2005
Messages : 769
Points : 788
Points : 788
Citation:
Envoyé par Bizoo Voir le message
Mais à l'affichage il est demander le $objet_demande->getIdStatut();
C'est curieux. Cela dit, je n'utilise que Doctrine, c'est peut-être spécifique à l'administration avec Propel auquel cas je ne peux pas t'aider. Mais à tout hasard : est-ce que la relation demande -> statut est bien déclarée dans le schema.yml ?
Herode est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 11h47   #5
Membre régulier
 
Homme Yoann Bianchin
Développeur informatique
Inscription : avril 2007
Messages : 158
Détails du profil
Informations personnelles :
Nom : Homme Yoann Bianchin
Âge : 25
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2007
Messages : 158
Points : 93
Points : 93
Oui oui tout est bien déclaré dans le schema !

Je ne trouve pas étonnant que cela me retourne l'id car la fonction getId récupère la valeur du champ de l'objet, aucun lien n'est fait avec une autre classe, c'est un simple getter.

Mais ce que je pensais, c'est qu'il y avait peut être une meilleur façon de faire en utilisant un partial ou je ne sais quoi approchant ...
Bizoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/12/2010, 17h11   #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
Ta requête, bizarrement placée dans un template, elle devrait l'être dans le contrôleur, te retourne un objet.

L'affichage d'un objet utilise __toString() si elle existe, c'est géré par symfony, donc indépendant de l'ORM utilisé.

Vérifie si ton objet retourné est bien unique (quoique, vu la requête, je ne vois pas comment il pourrait être une liste).

Vérifie si, à partir de l'objet tu peux afficher le toString par un
$monObjet->__toString()

Après, on va creuser ailleurs.
__________________
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 06/01/2011, 10h47   #7
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Citation:
Envoyé par Herode Voir le message
Le plus simple est de renseigner une méthode 'magique' __toString() pour ton objet Statut :
Code :
public function __toString() { return $this->getLibelle(); }
Tu devrais alors voir apparaître le résultat du __toString() à la place des ids, sans même avoir à modifier les templates.

Oui mais ou renseigner cette méthode dans le modèle ?

Comment l' appeler ensuite ?

Merci.
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 14h41   #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
Il n'y a pas d'appel à faire, c'est la méthode magique automatiquement appelée si on n'en précise pas d'autre.
__________________
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 06/01/2011, 15h21   #9
Membre régulier
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 75
Points : 75
Envoyer un message via Skype™ à mantex
Comment s' en servir ?

Classique j' ai des champs ids que j' aimerai transformé en nom ou prenom..

Ex: $contributor=>getContributorId()

j'ai testé $contributor=>getContributorId()->__toString().

PAs good..
mantex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 15h28   #10
Membre confirmé
 
Avatar de Vivian Pennel
 
Vivian Pennel
Developpeur Symfony | JSF/Seam
Inscription : août 2004
Messages : 173
Détails du profil
Informations personnelles :
Nom : Vivian Pennel
Âge : 23
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Developpeur Symfony | JSF/Seam
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : août 2004
Messages : 173
Points : 246
Points : 246
__toString() est une méthode appelée lorsque l'objet a besoin d'être converti en chaîne de caractères.

Par exemple lors d'une concaténation

Code :
1
2
 
$maChaine = 'Mon objet : ' . $objet
dans une vue
Code :
1
2
 
<?php echo $objet ?>
Je ne connais pas bien propel, mais je ne comprends pas l'intérêt de vouloir absolument l'ID ?
Si tu as ton objet tu fais tout simplement

Code :
<?php echo $contributor ?>
qui appellera __toString() de la classe Contributor
__________________
Mon blog : http://blog.developpez.com/vivian-pennel/
Vivian Pennel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 16h48   #11
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
Yo, ça me paraissait tellement évident que j'avais pas compris la question.

La réponse ci dessus est la bonne !

Si non, utilise directement ce que tu souhaites voir apparaître...
__________________
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 21h50.


 
 
 
 
Partenaires

Hébergement Web